WindowsソケットUDP開発例

3299 ワード

開発環境:vc++6.0
Windows socket UDP開発関数の紹介:
 
int recvfrom(SOCKET s,char FAR * buf,int len,int flags,struct sockaddr FAR * from,int FAR * fromlen);

説明:1 SOCKET s:ソケット2 char FAR*buf:受信データバッファ3 int len:受信データバッファサイズ4 int flags:このパラメータはrecvfrom()の動作に影響し、0:特殊な動作なしMSG_PEEK:有用なデータは受信バッファにコピーされますが、システムバッファから削除されません.MSG_OOB:処理帯域外データを表します.5 struct sockaddr FAR*from:このパラメータは、送信データのホストアドレス6 int FAR*fromlenを返します:アドレス長7は、受信データバイト数を正常に返し、失敗するとSOCKET_を返しますERRORエラー
 
 
int sendto(SOCKET s,const char FAR* buf,int len,int flags,const struct sockaddr FAR* to,int tolen);

説明:1 SOCKET s:ソケット2 const char FAR*buf:送信データバッファ3 int len:受信データバッファサイズ4 int flags:このパラメータはsendto()の動作に影響し、以下の値がある:0:特殊な動作なしMSG_DONTROUTE:トランスポート層はデータをMSGにルーティングしないでくださいOOB:このデータは5 const struct sockaddr FAR*to:データホストのアドレスを受け入れる6 int tolen:ホストアドレスの大きさその他の関数はTCPと一致します.
 
http://blog.csdn.net/qq_24282081/article/details/55805436
開発例:
クライアントはサーバに「MyUDP」を送信し、サーバは画面に表示されることを受信する
 
//	Server

#include "stdafx.h"
#define BUF_SIZE 64
#include
int main(int argc, char* argv[])
{	
	WSADATA wsd;
	SOCKET	s;
	SOCKADDR_IN serAddr;
	char buf[BUF_SIZE];
	SOCKADDR ClientAddr;
	
	//         
	if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
	{
		printf("WSAStartup failed!
"); return 1; } // s = socket(AF_INET,SOCK_DGRAM,0); if(s == INVALID_SOCKET) { printf("socket failed!
"); WSACleanup(); return 1; } // serAddr.sin_family = AF_INET; serAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY); serAddr.sin_port = htons((short)5000); if(bind(s,(SOCKADDR *)&serAddr,sizeof(serAddr)) == SOCKET_ERROR) { printf("bind() failed: %d
",WSAGetLastError()); closesocket(s); WSACleanup(); return -1; } // int nClientLen = sizeof(ClientAddr); ZeroMemory(buf,BUF_SIZE); if(recvfrom(s,buf,BUF_SIZE,0,(SOCKADDR *)&ClientAddr,&nClientLen) == SOCKET_ERROR) { printf("recvfrom failed: %d
",WSAGetLastError()); closesocket(s); WSACleanup(); return -1; } printf("%s
",buf); cin.get(); return 0; }

 
 
//	Client

#include "stdafx.h"
#define BUF_SIZE 64
#include
int main(int argc, char* argv[])
{
	WSADATA			wsd;
	SOCKET			s;
	SOCKADDR_IN		serAddr;
	char			buf[BUF_SIZE];

	//      
	if(WSAStartup(MAKEWORD(2,2),&wsd) != 0)
	{
		printf("WSAStartup failed! 
"); return -1; } // s = socket(AF_INET,SOCK_DGRAM,0); if(s == INVALID_SOCKET) { printf("socket failed : %d
",WSAGetLastError()); return -1; } // ZeroMemory(buf,BUF_SIZE); strcpy(buf,"MyUDP"); serAddr.sin_family = AF_INET; serAddr.sin_addr.S_un.S_addr = inet_addr("192.168.1.171"); serAddr.sin_port = htons((short)5000); int nServAddLen = sizeof(serAddr); if(sendto(s,buf,BUF_SIZE,0,(SOCKADDR*)&serAddr,nServAddLen) == SOCKET_ERROR) { printf("sendto failed: %d
",WSAGetLastError()); closesocket(s); WSACleanup(); return 1; } printf("%s",buf); closesocket(s); WSACleanup(); cin.get(); return 0; }