⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_41340.htm

📁 vc
💻 HTM
字号:
<p>
序号:41340 发表者:关及 发表日期:2003-05-26 13:55:50
<br>主题:服务器用udp编程有没有监听一说?
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp; 技术内幕IV上见到一个多线程阻塞调用recvfrom()的例子,第一个线程的recvfrom()收到数据返回后,新建一个与自己一样的线程启动新的recvfrom()等待,自己则转去处理收到数据,而后结束本线程。在第一个recvfrom()返回,第二个recvfrom()启动之前,有一小段时间,在高速网络下,服务器在这段时间里可能到达很多udp数据报,那这些数据报是否会被丢弃造成丢包?如果会的话,一般采取什么样的监听方法避免本机丢包呢?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:关及 回复日期:2003-05-26 13:58:51
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp;有一种办法,就是收端对到达的每个包回发一个确认包(应用层确认),没有收到确认的,就超时重发,这样或许可以避免本机的监听空隙造成的丢包。但是在请求数比较大的情况下,这么做效率太低了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:david (小鱼儿) 回复日期:2003-05-26 16:36:21
<br>内容:为啥不用TCP呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:关及 回复日期:2003-05-26 19:11:23
<br>内容:&nbsp;&nbsp;&nbsp;&nbsp;数据量小,且格式固定,种类少,传达控制信息,传完就没事了。犯不着用tcp吧。而且,我的问题并不是针对我的代码,而是针对用udp的情形。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:阿峰 回复日期:2003-05-27 12:01:58
<br>内容:采用UDP方式传输数据不可避免的会掉失部份数据,在编程前就应预<BR>见到这一点。以下方式对你或许有用。<BR>//主程序<BR>for(int i = 0;i&lt;初始线程数;i++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;StartThread();<BR><BR>//线程处理函数<BR>ThreadProc()<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;EnterCriticalSection(&amp;CriticalSection );<BR>&nbsp;&nbsp;&nbsp;&nbsp;WaitUdp();//等待数据。<BR>&nbsp;&nbsp;&nbsp;&nbsp;LeaveCriticalSection(&amp;CriticalSection);<BR>&nbsp;&nbsp;&nbsp;&nbsp;StartThread();//再生一线程,保证随时有一定数量的Udp处理线程在等待中。<BR>&nbsp;&nbsp;&nbsp;&nbsp;ProcessUdp();//处理UDP数据包。<BR>}<BR>如果ProcessUdp()比较耗时就像以上这样再生一线程,切初始线程数应多一点。<BR>否则就不用再生一线程,在处理完后继续等待。<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:关及 回复日期:2003-05-27 20:23:56
<br>内容:&gt;&gt;..........................<BR>&nbsp;&nbsp;.................<BR>&nbsp;&nbsp;StartThread();//再生一线程,保证随时有一定数量的Udp处理线程在<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;~~~~~~~~~<BR>&nbsp;&nbsp;等待中。<BR>&nbsp;&nbsp;.................<BR>&gt;&gt;..........................<BR>不好意思,我不大明白,怎么是一定数量呢,在一个套接字上进行<BR>recvfrom的线程可以好多个吗,我觉得一个套接字上监听的函数<BR>应该同时只允许一个才对啊。 
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:阿峰 回复日期:2003-05-28 08:57:15
<br>内容:所以我才用了紧急代码区,它保证随时只有一个线程在使用recvfrom<BR>这里CriticalSection应是一全局变量。<BR>EnterCriticalSection(&amp;CriticalSection );
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -