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

📄 subject_27650.htm

📁 一些关于vc的问答
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<p>
序号:27650 发表者:嵇山 发表日期:2003-01-14 11:12:06
<br>主题:我想请问关于recv()的问题
<br>内容:我用recv()去收一个socket的内容,但debug时,与我用其他工具抓来的包<BR>相比较,总是发现前面多了四个字节.<BR>大家有没有碰到过这样的事情,折同两天了,依然不能解决.<BR><BR> Packet = (uchar *)(malloc( 1208*sizeof(uchar)));<BR>&nbsp;&nbsp;memset(Packet,0,1208);<BR><BR>i = recv(Sock,(char far *)Packet,1208,0);<BR> printf("i=%d&nbsp;&nbsp;",i);<BR><BR>返回的i值是对的,但就是packet的前4个字节与抓来的包的内容不队,<BR><BR>实际上我程序抓来的包从第5个字节开始与用工具抓的包第一个字节相同,后面的都相同,实际上就是前面多出了4个字节.<BR>不知道是什么原因.
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:mm2003 回复日期:2003-01-14 11:27:02
<br>内容:接受时为什么要强制设为far指针,如果用far指针不应用MALLOC(),建议你用NEW开辟空间
<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-01-14 13:48:59
<br>内容:谢谢mm2003<BR><BR>刚才照你的方法改了一下,但结果还是和原来的一样,多了4个字节.<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>
回复者:mm2003 回复日期:2003-01-14 14:28:40
<br>内容:还有一点疑问,你开辟的是一个unsigned char的指针,接受时怎么又换成char,到底发送方发的是什么类型呢?
<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-01-14 15:10:19
<br>内容:因为recv的参数职能是char *的,<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-01-14 15:19:01
<br>内容:mm2003:<BR>谢谢你<BR>刚才照你说的改了一下,但还是不行,<BR>真的不知道除出了什么问题<BR><BR>同一个程序,你用抓包的软件抓来的,和自己程序里面的就是不一样<BR>memory里packet的内容与抓包的内容不一样.
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:mm2003 回复日期:2003-01-14 16:10:31
<br>内容:我怀疑那4个字节是OUT OF BAND数据,你用RECV()最后参数用MSG_PEEK试一试
<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-01-14 16:23:34
<br>内容:已经用它是过了,但是不行,我用的<BR>i = recv(Sock,(char far *)Packet,1208,0);<BR>这样不行,<BR>后来改成i = recv(Sock,(char far *)Packet,1208,MSG_PEEK);<BR>还是不行,<BR>再看msdn,我看标准参数是(SOCKET ,char FAR *,int,int)<BR>于是我改成i = recv(Sock,(char FAR *)Packet,1208,0);<BR>还是不行,<BR>还有,malloc不能和far 一起用吗?<BR><BR>我没有用bind函数,<BR>是否一定要用bind,<BR>我只用了connect.<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-01-14 16:28:56
<br>内容:一小段还算完整的程序:<BR><BR>SOCKET hNewSock;<BR>char username[256];<BR>hNewSock = accept(_this-&gt;m_sock, NULL, NULL);<BR>// make it blocking<BR>WSAAsyncSelect(hNewSock, hwnd, 0, 0);<BR>u_long blk = 0;<BR>int res = ioctlsocket(hNewSock, FIONBIO, &amp;blk);<BR>assert(res == 0);<BR>CloseScreenSaver();<BR>// Se if the server's sending a user name<BR>int namelen = recv(hNewSock, username, 250, 0);<BR>if (namelen &gt;= 0) <BR>username[namelen] = 0;<BR>log.Print(2, _T("Flash for '%s'\n"), username);<BR>closesocket(hNewSock);<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>
回复者:mm2003 回复日期:2003-01-14 16:32:43
<br>内容:我记得far指针是和farmalloc()联用的,很久不用了,另外不知你用的是TCP方式还是UDP方式,TCP方式bind()一定要用,UDP方式我试过好像不用bind()也可以
<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-01-14 16:35:37
<br>内容:也就是说<BR>char Packet[1028];<BR>i = recv(SockPacket,1208,0);<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>
回复者:嵇山 回复日期:2003-01-14 16:43:04
<br>内容:mm2003:<BR>谢谢,<BR>我是用建立在tcp上的smb,但我只写client端的程序,bind()是不是用在服务器端的,client是否必要.
<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-01-14 16:45:04
<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>
回复者:mm2003 回复日期:2003-01-14 16:49:26
<br>内容:如果是TCP,client和server两端都需要用bind()
<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-01-14 17:08:14
<br>内容:sorry, buffer忘了<BR><BR>i = recv(SockPacket,Packet,1208,0);<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-01-14 17:13:03
<br>内容:什么呀,逗号忘了<BR><BR>i = recv(Sock,Packet,1208,0);<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-01-14 17:17:05
<br>内容:呵呵,刚才把bind加上去了<BR>哎,还是老样子<BR>不过,recv返回得值即i有时候是比抓来的多4,有时候就是4,<BR>执行第一次 得时候,i=117,(比抓来的多4)<BR>第2次,i=4;<BR>然后,有时候是4,有时候是117,<BR>我们老师说可能是一开始就有4个byte被抓进了队列,然后,后面一直没有被清掉,所以才多4byte.<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>
回复者:mm2003 回复日期:2003-01-15 09:50:07
<br>内容:不知你设置的什么方式,是BLOCKING还是UNBLOCKING,这个RECV()是写在接受线程中的还是你手动调用的
<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-01-15 11:01:16
<br>内容:我用的select,unblocking,没有用到线程<BR>我都快疯了,现在我要得到recv()返回的数据,我只好在每个后面都加上4,<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>
回复者:mm2003 回复日期:2003-01-15 11:48:12
<br>内容:简单读了一下你的程序,我的两个意见<BR>1.改用BLOCKING模式试一下,如果用UNBLOCKING方式加长等待时间或做个循环判断返回的字节数是否正确,正确再退出<BR>2.bind()函数应该在connect()之前用<BR>不知正确否,希望对你有帮助。

⌨️ 快捷键说明

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