#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
#include <iostream>
#include <time.h>
int main()
{
char log[256] = "20100119161638|20100118184827|20100119235141|3|10.90.177.67|53391|117.136.31.195|21920|211.136.192.6|53391|0.0.0.0|0|0|0|17|218|1"
WSADATA wsd
if(WSAStartup(MAKEWORD(2,2),&wsd)) {
cerr <<"WSAStartup error..." <<endl
return INVALID_SOCKET
}
SOCKET sockClient = socket(AF_INET,SOCK_DGRAM,0)
SOCKADDR_IN addrSrv
addrSrv.sin_family = AF_INET
addrSrv.sin_addr.S_un.S_addr = inet_addr("172.18.11.32")
addrSrv.sin_port = htons(514)
bind(sockClient,(SOCKADDR*)&sockClient,sizeof(SOCKADDR))
unsigned long sendTime = 20//发送时间
time_t nowTime = time(NULL)
time_t endTime = nowTime + sendTime
while(time(NULL) <endTime)
{
sendto(sockClient,log,strlen(log)+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR))
}
std::cout <<"finished sending " <<std::endl
closesocket(sockClient)
WSACleanup()
getchar()
}
UDP接收比TCP接收要简单很多,性能也要高很多假设你要接受的UDP包都是最大MTU,不大于1500字节一个包,100万个UDP包也就是1.5GBps的流量,这个并不困难,当然首先网口要有足够的带宽。我以前开发的流媒体转发服务,在生产环境下,一台设备上游UDP包可以接收2.7GBps,并同时转发出去。
当然这个和程序运行的设备配置是有关系的,主要是网卡和CPU
给你几个建议:
1:多线程处理,单个线程处理能力还是有限的,同时尽量把线程绑定到CPU核上。
2:linux系统的网络参数要优化,包括读写缓冲区大小
3:如果非必要,可以采用阻塞模式接收,性能比非阻塞要好。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)