WindowsソケットUDP開発例
3299 ワード
開発環境:vc++6.0
Windows socket UDP開発関数の紹介:
説明: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エラー
説明: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」を送信し、サーバは画面に表示されることを受信する
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;
}