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

📄 subject_15463.htm

📁 一些关于vc的问答
💻 HTM
字号:
<p>
序号:15463 发表者:cyx 发表日期:2002-09-18 15:56:32
<br>主题:UDP 绝对疑难问题???
<br>内容:各位高手, 我最近在编程中碰到一个问题, 很是郁闷:<BR><BR>代码如下:<BR>&nbsp;&nbsp;CMySocket::OnReceive(...)<BR>&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;char szBuffer[500];<BR>&nbsp;&nbsp;&nbsp;&nbsp;ReceiveFrom(szBuffer,sizeof(szBuffer),strIP,uPort,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;TRACE1("Data: %s\n",szBuffer);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;CAsyncSocket::OnReceive(...);<BR>&nbsp;&nbsp; }<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR> 上述代码调用ASyncSocket::OnReceive(...)函数内的ReceiveFrom<BR>函数,主要用来接收UDP数据包, 但在实际测试中,服务器端发送了100个UDP数据包,但跟踪语句只打印出前30-40个数据包的数据后就停止接收了, 这是怎么回事啊?
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:Tuu Puu 回复日期:2002-09-18 16:15:54
<br>内容:你在udp包中加个特别的序列号,看看收到的是那些序列号的包,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>
回复者:cyx 回复日期:2002-09-18 16:52:04
<br>内容:可是我总是感觉好像已经通过ReceiveFrom函数接收下来的UDP数据包并没有从接收缓冲区中移除, 而造成缓冲区越来越小, 最后不能再接收数据.<BR><BR>原因是这样的, 我做了个实验, 通过SetSocketOpt增加接收缓冲区大小, 则马上能够接收到的数据包也在增加,并且我已经接收到的包的序号是连续的. <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>
回复者:Tuu Puu 回复日期:2002-09-18 17:24:58
<br>内容:刚看了看MSDN,你那个nFlag设置成MSG_PEEK了吗?如果是这样,把那个nFlag设置成0试试
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:cyx 回复日期:2002-09-18 17:38:31
<br>内容:<BR>没有设置成MSG_PEEK, 是0.<BR><BR>我在程序里的代码就是这么写的:<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;char szBuffer[500];<BR>&nbsp;&nbsp;&nbsp;&nbsp;ReceiveFrom(szBuffer,sizeof(szBuffer),strIP,uPort,0);<BR>&nbsp;&nbsp;&nbsp;&nbsp;TRACE1("Data: %s\n",szBuffer);<BR><BR>&nbsp;&nbsp;并且ReceiveFrom的调用没有返回SOCKET_ERROR<BR><BR>百思不得其解!<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>
<font color=red>答案被接受</font><br>回复者:零 回复日期:2002-09-18 23:56:59
<br>内容:如果,你的udp发的过于快,是可能出现你这种情况的<BR>原因就是你说的 buffer 太小了.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:cyx 回复日期:2002-09-19 08:19:16
<br>内容:可以问题的关键在于接收缓冲区是系统负责处理的, 我认为当我调用ReceiveFrom(...)函数后,系统应在接收缓冲区将已经接收下来的数据包从缓冲区移除(因为我已经调用ReceiveFrom函数了),换句话来讲就是说缓冲区应是一个能够让数据包循环的地方,一方面不断的接收数据包,另一方面,将用户已经处理的数据从缓冲区移除,可目前不是这样。<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>
回复者:Tuu Puu 回复日期:2002-09-19 09:45:13
<br>内容:你干脆把程序做附件贴上来看看
<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 + -