📄 subject_64951.htm
字号:
<p>
序号:64951 发表者:普渡众生 发表日期:2003-12-14 16:22:27
<br>主题:用SOCKET传送多个文件时怎样区别文件的边界?
<br>内容:我在用SOCKET传送多个文件时发现没有办法区别一个文件的边界,也就是说读SOCKET缓冲里的内容时,会把下一个文件的内容读到,有没有把内容写回SOCKEY缓冲的函数呢?或则其他办法,盼高手指点。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-14 18:51:17
<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-12-14 22:20:18
<br>内容:我有传送文件长度,但我的意思是说,我的缓冲区大小不是1,所以就会在读到文件末尾的时候从SOCKET的缓冲区里多读些数据出来,有没有办法把多的数据写回去?我现在采用了一个静态缓冲区来保留前一个文件的数据,基本上解决了,我想如果把缓冲区大小定为1的话因该不会有着个问题,但是那样又太慢<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>
回复者:BigJames 回复日期:2003-12-14 22:28:45
<br>内容:既然能够知道文件长度,那么就可以在读socket的时候,修改所需的长度呀!<BR>比如<BR>int len = xxxxx;<BR><BR>while (len > 0)<BR>{<BR> len -= recv(socket, buf, len);<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>
回复者:普渡众生 回复日期:2003-12-15 10:49:16
<br>内容:len比buf的缓冲长度大会不会溢出?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:BigJames 回复日期:2003-12-15 11:06:18
<br>内容:当然会。我给你的只是一个理论上的例子,实际使用要考虑许多其它因素。例如错误处理,缓冲区策略。<BR><BR>假设你采用一个固定的缓冲区。<BR>char szBuf[4096];<BR><BR>int len = transfer_file_length;<BR><BR>while (len > 0)<BR>{<BR> len -= recv(socket, szBuf, (len > 4096 ? 4096 : len));<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-12-15 11:33:57
<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>
回复者:BigJames 回复日期:2003-12-15 11:51:25
<br>内容:只传文件,文件名包括路径(相对)。<BR><BR>例如你要传的文件为c:\a\a.txt和c:\a\b\b.txt。<BR>假设“c:\”传输顶级目录,所有的文件名都取相对于"C:\"的相对路径。<BR>那么你传输的2个文件名应该是"a\a.txt"和"a\b\b.txt",另一端收到后,根据文件名中的路径信息,把该文件放到合适的目录下,必要时,创建新的子目录。
<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-12-15 13:15:16
<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>回复者:BigJames 回复日期:2003-12-15 13:30:01
<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 + -