holymaple
holymaple
2015-01-12 16:04

C# socket networkstream 接收数据

  • c#
  • socket
  • 接收

最近在做c/s,客户端用C#的Socket进行通信。接收数据开单独的接收线程使用networkstream进行接收
接收的方法大体上跟网上流传的一样
do
{
int readSize = mNetworkstream.Read(bytes, 0, 1024);
if (readSize > 0)
{
//do sth
}
}while(mNetworkstream.DataAvailable)

这样接收局内网或者单机没问题,但是放到外网测试网络不稳定就接收不全。
搜集很多资料,也试过在发送Socket包之前加个包大小,然后在while中增加判断是否读到包的大小,可是一样接不全,中间好像掺杂了一些没用的数据?

我一个包很容易超过byte[10240],而且要整个包接收完才能处理数据。
请问C# Socket使用networkstream怎样才能接收完全呢?

ps:也有听说过异步networkstream.beginread接收。鉴于网上一大抄,各种人贴各种代码片段根本就没用。有些有用但只能接收一次。。。

如果有beginread相关代码也希望大牛们贴出来参考一下,不要贴代码片段。。。

谢谢了~

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

4条回答