秋寒兄,帮忙解决个问题,谢谢

手抓宝 2010-10-13 12:55:56
关于Socket服务端向客户端发送2进制流,客户端接收时会出现字节丢失的情况

服务端

byte[] aryRet = ........
byte[] aryIPPort=...........
//将ip信息和视频流分别copy到发送流中发送
byte[] ary = new byte[aryRet.Length + aryIP.Length];
Array.Copy(aryIP, ary, aryIP.Length);
Array.Copy(aryRet, 0, ary, aryIP.Length, aryRet.Length);

Socket对象.Send(ary);


客户端接收

protected void StartReceiving()
{
byte[] response = new byte[30018];
SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs();
socketEventArg.Completed += OnReceiveCompleted;
socketEventArg.SetBuffer(response, 0, response.Length);
client_socket.ReceiveAsync(socketEventArg);
}

protected void OnReceiveCompleted(object sender, SocketAsyncEventArgs e)
{
this.Dispatcher.BeginInvoke(new mydelegate(ViewReceived), e.Buffer);
}

private void ViewReceived(byte[] buffer)
{
string strIPPort = Encoding.UTF8.GetString(buffer, 0, 18);
MemoryStream ms = new MemoryStream(buffer, 18, buffer.Length - 18);
}


这里ViewReceived(byte[] buffer)的参数buffer,有的时候正常,有的时候会丢失第一个byte,请问为啥会出现这样的情况?如何解决?
...全文
168 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jv9 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 hrabeyond 的回复:]
WSExplorer这个抓包工具,是不是不怎么常用啊,我就找了这一个,用着感觉还很方便。。
[/Quote]

WSExplorer是很常用的抓包工具。你也可以下载fiddler,这个也是不错的免费抓包工具。
网络应用开发,抓包调试是难免的,有个工具在手边,比较方便。
jv9 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hrabeyond 的回复:]
哦了,问题解决了,原来是程序里有另外一个异步发送的方法,返回时用了一个Completed方法。。。

另外我又加了一个判断包头的方法,如果验证失败直接扔掉整个包。

恩,解决了解决了
[/Quote]

恭喜问题解决。感谢分享经验。
手抓宝 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jv9 的回复:]
丢失第一个Byte?这个问题比较难判断,单单从代码来看,看不出错误。楼主 有试过抓包看看么?看看丢包时的数据传输,是不是网络问题造成的? 另外,可以同时debug看看,在客户端是否封装正确。
[/Quote]

呃。。。。抓包。。。。没涉及过那么高端的东西

我去找找相关资料吧
手抓宝 2010-10-14
  • 打赏
  • 举报
回复
WSExplorer这个抓包工具,是不是不怎么常用啊,我就找了这一个,用着感觉还很方便。。
手抓宝 2010-10-14
  • 打赏
  • 举报
回复
哦了,问题解决了,原来是程序里有另外一个异步发送的方法,返回时用了一个Completed方法。。。

另外我又加了一个判断包头的方法,如果验证失败直接扔掉整个包。

恩,解决了解决了
jv9 2010-10-14
  • 打赏
  • 举报
回复
丢失第一个Byte?这个问题比较难判断,单单从代码来看,看不出错误。楼主 有试过抓包看看么?看看丢包时的数据传输,是不是网络问题造成的? 另外,可以同时debug看看,在客户端是否封装正确。
SilverRight 2010-10-13
  • 打赏
  • 举报
回复
难道是传说中的粘包吗。估计版主现在正睡觉呢。哈哈。
老Key 2010-10-13
  • 打赏
  • 举报
回复
我知道,,我就不说。。。哈哈。。围观。。。。

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧