问题描述
我目前的方法是Socket.Available這個屬性來實作,如以下的代碼:while(Socket.Available>0)....略Socket.Receive}但是Socket.Available只是取得已經從網路接收的資料量而已..所以如果網路回應的比較慢,資料還沒有被讀入到緩衝區內..那Socket.Available就會返回0,直到又從網路接收到新的資料後Socket.Available才會大於0因此很多時候上面的代碼根本還沒把資料全部接收完畢就跳離迴圈了!!我搜尋很多文章看到大家也都是根據Socket.Available來接收資料..難道不會和我遇到同樣的問題嗎??資料還沒真正讀完就跳出來了??要怎樣才能解決這問題呢??有像c語言有feof可以測試Socket已經讀到結尾處的方法嗎??或是更適合c#的方法??有請各方高手解答,謝謝。
解决方案
解决方案二:
和发送方弄一个协议啊,完毕就发送一个特殊字符代表结束或者发送方在发送数据之前先发送一个数据的大小过来,然后在发送数据,接受方按照接收到的数据大小来定义什么时候算是发送完毕
解决方案三:
應該是client要配合server才對吧!!怎麼會讓server來配合client??每一個協議都有自已的標準吧,像是pop3、smtp、http...etc哪有說改就改的,而且權限也不在我阿...就算可以改,這樣子哪裡還叫編程阿??
解决方案四:
頂...
解决方案五:
我想應該無解也沒人知道吧..看來這篇又要石沉大海了
解决方案六:
不明白你的意思。Socket本来就要一直不停的接收,无所谓接收完成不完成。不知道你想要实现什么样的效果。你能说说吗?
解决方案七:
这么做是不对的.因为TCP无消息边界,ABC有可能是先收到AB,然后Available为0,过一会再收到C,所以你应该在发送前先传输文件长度,然后再等待,推荐用BinaryReader,这么用:br=newBinaryReader(NetworkStream);然后br.read(args);这样能解决消息边界问题