如何提高UPD广播发送速度???

yanshu117 2008-12-08 12:23:38
由于项目要求,要用到广播发送数据,接收端为自己硬件,不是计算机,所以没有IP之说,只能在发送端用UDP广播的形式把数据发送出去。下面是我发送部分的代码,各位大大帮我看看有没有什么值得修改的地方以提高发送速度,因为目前的速度,无法满足我们的需求,通过示波器,可以发现我这代码的占空比特别高;而我这下面代码都是极限测试了,没有等待就是不停发,但还没有我在网上找到的一个程序的占空比高,所以感觉我这个程序存在严重问题,希望知道的大大帮忙看看,谢谢

 WSADATA wsaData;                  //指向WinSocket信息结构的指针       
SOCKET sockListener;
SOCKADDR_IN sin,saUdpServ;
BOOL fBroadcast = TRUE;
char sendBuff[100];
int nSize;
int ncount=0;
if(WSAStartup(MAKEWORD(1,1),&wsaData)!=0)//进行WinSocket的初始化
{
MessageBox(NULL,"Can't initiates windows socket!Program stop.","",MB_OK);//初始化失败
}
sockListener=socket(PF_INET,SOCK_DGRAM,0);
setsockopt(sockListener,SOL_SOCKET,SO_BROADCAST,
(CHAR *)&fBroadcast,sizeof(BOOL));
int nSendBuf=0;//设置为0
setsockopt(sockListener,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(nSendBuf));
sin.sin_family = AF_INET;
sin.sin_port = htons(0);
sin.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(sockListener,(SOCKADDR *)&sin,sizeof(sin))!=0)
{
MessageBox(NULL,"Can't bind socket to local port!Program stop.","",MB_OK);//初始化失败
}
saUdpServ.sin_family = AF_INET;
saUdpServ.sin_addr.s_addr = htonl(INADDR_BROADCAST);
saUdpServ.sin_port = htons(7001);//发送用的端口,可以根据需要更改
nSize = sizeof(SOCKADDR_IN);
strcpy(sendBuff,"This is a Test");
while(!csVar.bStop)
{ //下面的struct SendCopyScreenStruct 大小为(512+2)*4+8个字节
sendto(sockListener,(char *)&csVar.sendObject[nItem],
sizeof(struct SendCopyScreenStruct),0,(SOCKADDR *)&saUdpServ,
sizeof( SOCKADDR_IN ));
ReleaseSemaphore(csVar.hEmptySendBuffMutex,1,NULL); //空发送缓冲数+1
nItem++;
if(nItem == MAXCOUNT_BUFF)nItem = 0;
}
...全文
210 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanshu117 2008-12-18
  • 打赏
  • 举报
回复
试了好多天还是没好办法 。郁闷呀!这两天老板又临时让搞音频,最后出来了,但一测试在他硬件部分有杂音。。我电脑模拟很好,后来分析原因 他接受部分就1024*2字节的缓冲。这哪里够呀,头疼,继续想办法去
nizhaorong 2008-12-11
  • 打赏
  • 举报
回复
不停的发,死命的发,哈哈
Wenxy1 2008-12-08
  • 打赏
  • 举报
回复
想问个问题:你们的设备有MAC地址吗,用UDP socket来发送什么数据?
yanshu117 2008-12-08
  • 打赏
  • 举报
回复
不好意思,忘了交代清楚,我这个是电脑给一个硬件发送数据,接收端没有IP,大家也不用研究这个为什么没有,其实我也不明白,这个是硬件部分,不是我负责,我负责就是发送部分必须用UDP广播形式发送,而2楼说的交换机问题,起始不用考虑,因为我们用的是直连线,电脑千兆网卡出来 直接直连线 连接硬件设备
smaltdd 2008-12-08
  • 打赏
  • 举报
回复
除非你的设备在hub或者交换机的监听口上 ,否则没有IP交换机怎么给你发送数据包?
Wenxy1 2008-12-08
  • 打赏
  • 举报
回复
int nSendBuf=0;//设置为0
setsockopt(sockListener,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(nSendBuf)); //发送缓存设置为0不是明智的做法,建议设置不现的值,比如1024,2048等值,进行测试。
Wenxy1 2008-12-08
  • 打赏
  • 举报
回复
纠正一下,用UDP接收发送数据,接收方的设备,应当有IP地址。
superdiablo 2008-12-08
  • 打赏
  • 举报
回复
可能是数据报分片了,你的数据报(512+2)*4+8字节算大了。改小一些试试。
rookieme 2008-12-08
  • 打赏
  • 举报
回复
多开几个线程,往死里发UDP包
caitian6 2008-12-08
  • 打赏
  • 举报
回复
关注
yanshu117 2008-12-08
  • 打赏
  • 举报
回复
不能用sleep那样发送频率就更少了 即使用也只能用Sleep(0)....
cmchao 2008-12-08
  • 打赏
  • 举报
回复
死循环里面怎么没有sleep呢
yanshu117 2008-12-08
  • 打赏
  • 举报
回复
啊 那怎么改呀 我只能从代码方面着手,而且用网上找的软件 他的速度就非常快。。
路人乙2019 2008-12-08
  • 打赏
  • 举报
回复
提高速度?看来通过代码写都差不多,除非你能修改核心层的实现。
yanshu117 2008-12-08
  • 打赏
  • 举报
回复
MAC地址???我不知道。那端的东西不是我做的,我不清楚 也没必要,用我上面代码就能发,但是速度不够,数据就是字符串,每个都那么长,大家帮忙看看每次都发那么多的数据,如何提高速度

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧