[quote=引用 1 楼 SPFarm 的回复:] 可以参考一下 http://msdn.microsoft.com/en-us/library/6y0e13d3(v=vs.110).aspx while (true) { //因为不知道文件内容的长度,所以要用 while循环,不断的接取数据 bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes,0,bytesRec); if (data.IndexOf("<EOF>") > -1) { // 接收完毕,跳出 break; } }
可以参考一下 http://msdn.microsoft.com/en-us/library/6y0e13d3(v=vs.110).aspx while (true) { //因为不知道文件内容的长度,所以要用 while循环,不断的接取数据 bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes,0,bytesRec); if (data.IndexOf("<EOF>") > -1) { // 接收完毕,跳出 break; } }
发送方发的格式我是知道的,只有文件名和文件数据,具体协议格式我知道,没有文件长度。我之前编了一个异步的,之所以无限循环就是因为没有办法判断结束条件,当发送方发送第二个文件时,我检测到第二个文件头我才能确定第一个文件接收完整。
[quote=引用 楼主 scailin 的回复:] 最近做一个socket通信的,现在已经有的TCP服务器端能够发送文件,但是发送文件的格式固定,只有文件名与文件数据。现在我应该如何接收这个文件,如何while循环去receive的话会阻塞,用异步beginread的话就会无限循环,我需要接收完数据就退出,所以这个办法也不行。我socket开发也有一段时间,自定义协议我是懂的,但是这次文件发送方无法提供文件长度,该如何接收?求大神指教。
[quote=引用 3 楼 scailin 的回复:] [quote=引用 1 楼 SPFarm 的回复:] 可以参考一下 http://msdn.microsoft.com/en-us/library/6y0e13d3(v=vs.110).aspx while (true) { //因为不知道文件内容的长度,所以要用 while循环,不断的接取数据 bytes = new byte[1024]; int bytesRec = handler.Receive(bytes); data += Encoding.ASCII.GetString(bytes,0,bytesRec); if (data.IndexOf("<EOF>") > -1) { // 接收完毕,跳出 break; } }
最近做一个socket通信的,现在已经有的TCP服务器端能够发送文件,但是发送文件的格式固定,只有文件名与文件数据。现在我应该如何接收这个文件,如何while循环去receive的话会阻塞,用异步beginread的话就会无限循环,我需要接收完数据就退出,所以这个办法也不行。我socket开发也有一段时间,自定义协议我是懂的,但是这次文件发送方无法提供文件长度,该如何接收?求大神指教。
[quote=引用 2 楼 Z65443344 的回复:] 接收的时候设置ReadTimeout参数(超时时间) 用while循环接收,并把接收的代码用try,catch包住 如果超时则进入catch(跳出循环)
接收的时候设置ReadTimeout参数(超时时间) 用while循环接收,并把接收的代码用try,catch包住 如果超时则进入catch(跳出循环)
110,538
社区成员
642,577
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧