您的位置:首页 > 其它

使用winsock+UDP写的一个简单接收端程序

2010-11-25 09:39 459 查看
本文原创,如转发,请标注原文链接地址:http://blog.csdn.net/Microsues/archive/2010/11/25/6033914.aspx

发表时间:2010-11-26 09:35:40

本程序使用VS2008编写,代码如下:

]//先打开服务器端,服务器在执行完recvfrom()后堵塞,等待接收数据...
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"WS2_32.LIB")
void main()
{
WSADATA         wsaData;
SOCKET          ReceivingSocket;
SOCKADDR_IN     ReceiverAddr;
int             Port = 8060;
char            ReceiveBuf[1024] = {0};
int             BufLength = 1024;
SOCKADDR_IN     SenderAddr;
int             SenderAddrSize = sizeof(SenderAddr);
int             Ret;
//初始化Winsock 2.2版本
if((Ret = WSAStartup(MAKEWORD(2,2),&wsaData)) !=0)
{
printf("ERROR:WSAStartup failed with %d/n",Ret);
return;
}
//创建一个新的套接字来接收数据报
if((ReceivingSocket = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP)) == INVALID_SOCKET)
{
printf("ERROR:SOCKET failed with %d/n",WSAGetLastError());
WSACleanup();
return;
}
//建立一个SOCKDDR_IN结构,这个结构将告知bind我们想要使用5150端口接收来自
//所有接口的数据报
ReceiverAddr.sin_family = AF_INET;
ReceiverAddr.sin_port = htons(Port);
ReceiverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
//使用bind将这个地址信息和套接字关联起来
if((bind(ReceivingSocket,(SOCKADDR*)&ReceiverAddr,sizeof(ReceiverAddr))) == SOCKET_ERROR)
{
printf("ERROR:bind failed with %d/n",WSAGetLastError());
closesocket(ReceivingSocket);
WSACleanup();
return;
}
////先打开服务器端,服务器在执行完recvfrom()后堵塞,等待接收数据...
printf("wait to receive data.../n");
if((Ret = recvfrom(ReceivingSocket,ReceiveBuf,BufLength,0,(SOCKADDR *)&SenderAddr,&SenderAddrSize))
== SOCKET_ERROR)
{
printf("ERROR: recvfrom failed with error %d/n", WSAGetLastError());
closesocket(ReceivingSocket);
WSACleanup();
return;
}
printf("We successfully received %d bytes from address %s:%d./n", Ret,
inet_ntoa(SenderAddr.sin_addr), ntohs(SenderAddr.sin_port));
for(int id=0; id<5 ; ++id)
printf("%c",ReceiveBuf[id]);
//应用程序结束接收数据报后,关闭套接字
closesocket(ReceivingSocket);
//应用程序结束后,调用WSACleanup
WSACleanup();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐