socket byte[] byteMessage = new byte[100];Socket newSocket = socket.Accept();newSocket.Receive(byteMessage);服务器端接受传过来的byte数组,但是不知道这个byte数组有多长,请问怎么准确的取到传过的byte数组? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 本帖最后由 bdmh 于 2011-05-31 14:58:15 编辑 我给你举几个例子吧:1. 比如XMPP那种,它接收到的字符串流,事实被SAX之类的解析器解析为一个一个数据描述节点。2. 比如msdn那种,它是以换行回车(\r\n)作为一个消息的结束标志。3. 比如http post命令那种,它是以连续两个换行来作为消息头的结束,然后消息体部分再以连续两个换行作为结束。总之你要动手自己去设计。 谢谢各位,我用了一个循环,不停的接受,把接受的不同长度的byte[]转换并拼成string,直到返回的byte[]长度为零为止 这肯定是不对的。我记得你问过这个问题。假设客户端一下子(仅使用一个Send语句)发送2000字节,服务器端的buffer的大小是10KBytes,假设网络质量不是很好的情况下,服务器端完全可能只能接收到1800字节,然后接收缓冲区里就变成0字节了,然后过了一瞬间才继续接收到剩下的200字节。假设客户端并发或者连续发送2000字节、20000字节共两个消息,服务器端的buffer的大小是10KBytes,由于TCP是延迟缓发送的,底层会把数据包组合在一起来发送,所以服务器又可能首先收到10000个字节,然后又收到 11000个字节,第三次又收到1000个字节。所以不指定高层次的设计,只拿网上那种所谓的点对点“通讯”的范例作为编程,是不对的。 是不是前面加固定的几个BYTE来表明长度 sp1234说的很高深,是不是要用个标识来表示发送过的数据结尾,或者像ericsg说的“前面加固定的几个BYTE来表明长度”,我试验一下加标识的话,会不会和发送过来的数据的某一段重复啊?这样提早结束接受,容易出现错误判断 public override int Read(byte[] buffer, int offset, int size) System.Net.Sockets.NetworkStream 的成员摘要:从 System.Net.Sockets.NetworkStream 读取数据。参数:buffer: 类型 System.Byte 的数组,它是内存中用于存储从 System.Net.Sockets.NetworkStream 读取的数据的位置。offset: buffer 中开始将数据存储到的位置。size: 要从 System.Net.Sockets.NetworkStream 中读取的字节数。返回值:从 System.Net.Sockets.NetworkStream 中读取的字节数。 路径不对,图片显示不出来的问题 Jquery图片显示 求已知圆心 起始点 终止点 画弧的问题 C#中WINFORM设计时,在宽屏和方屏上显示不一致的问题,请问如何解决。 关于Visual Studio 2005安装出错 C#支持变长数组吗 在Web.Config文件里,怎么写access数据库连接字符串? 学C#快1年了竟然连这么弱的问题都不会,大家帮忙,关于窗体间数据传递的问题。 求c#的计算器原代码(有科学计算功能) 请问什么叫本地线程? 怎么把".\a.h",".\config\b.h"变成".\\a.h"和".\\config\\b.h"? 文件的上传和下载
总之你要动手自己去设计。
System.Net.Sockets.NetworkStream 的成员摘要:
从 System.Net.Sockets.NetworkStream 读取数据。参数:
buffer: 类型 System.Byte 的数组,它是内存中用于存储从 System.Net.Sockets.NetworkStream 读取的数据的位置。
offset: buffer 中开始将数据存储到的位置。
size: 要从 System.Net.Sockets.NetworkStream 中读取的字节数。返回值:
从 System.Net.Sockets.NetworkStream 中读取的字节数。