标题:
UDP+VC++
[打印本页]
作者:
look_w
时间:
2017-10-24 21:02
标题:
UDP+VC++
UDP是面向无连接的,只要设置对方的IP和端口就可以发送数据了。当要指定本地端口时可以使用bind来绑定端口。
UDP服务器和UDP客户端其实是一样的,。差别就是服务器必须bind否则客户端无法发送数据到达,而客户端也何以使用bind的。
备忘一下。
这是给一个学妹写的一个UDP客户端测试程序。这个程序广播39个字节,并接收应答。
#include <WinSock2.h>
#include <stdio.h>
void main(void)
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
int len=10;
int ReLen;
unsigned char Buf[1024];
int i;
wVersionRequested=MAKEWORD(1,1);//请求协议版本
err=WSAStartup(wVersionRequested,&wsaData);
if(err!=0)
{
return ;
}
//检查协议版本
if(LOBYTE(wsaData.wVersion)!=1||HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup();
return ;
}
SOCKET scokClient=socket(AF_INET,SOCK_DGRAM,0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);//inet_addr("192.168.1.255");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(1500);
err=bind(scokClient,(SOCKADDR*)&addrSrv,sizeof(addrSrv));
if(err!=0)
{
printf("bind fail\n");
return ;
}
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.255");
addrSrv.sin_port=htons(1500);
sendto(scokClient,"123456789012345678901234567890123456789",sizeof("123456789012345678901234567890123456789")-1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
len=sizeof(SOCKADDR);
ReLen=recvfrom(scokClient,(char *)Buf,100,0,(SOCKADDR*)&addrSrv,&len);
printf("Relen=%d\n",ReLen);
if(ReLen>0)
{
for (i=0;i<ReLen;i++)
{
printf("%X ",Buf
);
}
}
printf("\n");
len=sizeof(SOCKADDR);
ReLen=recvfrom(scokClient,(char *)Buf,100,0,(SOCKADDR*)&addrSrv,&len);
printf("Relen=%d\n",ReLen);
if(ReLen>0)
{
for (i=0;i<ReLen;i++)
{
printf("%02X ",Buf
);
}
}
printf("\n");
closesocket(scokClient);
WSACleanup();
}
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0