#include<WINSOCK2.H>
#include<iostream>
#pragma comment(lib,"WS2_32.lib")
using namespace std;
typedef struct UDPdata {
int type;
int MoreSegment; // 0表示之后没有分段
int SegmentNum;
int LoadLength;
char ID[20];
char Load[512];
}UDPdata;
int main()
{
WSADATA wsaData;//初始化
SOCKET RecvSocket;
sockaddr_in RecvAddr;//服务器地址
int Port = 2019;//服务器监听地址
UDPdata RecvBuf;
int BufLen = sizeof(UDPdata);//缓冲区大小
sockaddr_in SenderAddr;
int SenderAddrSize = sizeof(SenderAddr);
//初始化Socket
WSAStartup(MAKEWORD(2, 2), &wsaData);
//创建接收数据报的socket
RecvSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
//将socket与制定端口和0.0.0.0绑定
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(Port);
RecvAddr.sin_addr.s_addr = htonl(INADDR_ANY);
bind(RecvSocket, (SOCKADDR *)&RecvAddr, sizeof(RecvAddr));
//调用Recvfrom函数在绑定的socket上接收数据
while (1)
{
printf("receiving datagrams...\n");
recvfrom(RecvSocket, (char *)&RecvBuf, BufLen, 0, (SOCKADDR *)&SenderAddr, &SenderAddrSize);
cout << RecvBuf.type << endl;
cout << RecvBuf.ID << endl;
cout << RecvBuf.MoreSegment << endl;
cout << RecvBuf.SegmentNum << endl;
cout << RecvBuf.LoadLength << endl;
cout << RecvBuf.Load << endl;
sendto(RecvSocket, (char *)&RecvBuf, BufLen, 0, (SOCKADDR *)&SenderAddr, sizeof(SenderAddr));
}
//关闭socket,结束接收数据
printf("finished receiving,closing socket..\n");
closesocket(RecvSocket);
//释放资源,退出
printf("Exiting.\n");
WSACleanup();
return 0;
}
简易UDP服务器
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 前提条件:你具备了阿里云服务器实例,并有公网IP地址。 注意:笔主不能访问公网ip的原因是端口没有打开 所以, 正...
- 用VLC搭建基于UDP的流媒体服务器 1. UDP(legacy)传统模式 服务器操作流程 打开 媒体,选择流,添...
- ntpd服务作为既可以作ntpServer,又可以作ntpClient ,只是配置上稍有不同。 ntpd服务运行时...
- (来源微信号:谷壬峻) 证券行业最坏的市场环境和政策环境已经过去,行业盈利有望小幅增长,监管资源正在向大券商倾斜。...