每一次传从要加标记,例如num1,endnum1  num2,endnum2
然后判断这些标记,就可以知道那个没穿了

解决方案 »

  1.   

    一般来说read = 0就接收完成了
      

  2.   

    如果只是传字符串,那说明你搞了半天只是在玩玩打打。真正的项目需要定义消息结构,哪里是一个消息的开头,哪里是结尾,哪里是中间填充的间隔。而消息的构成就更加复杂了,MSN和QQ就有完全不一样的消息结构。这个就是所谓应用层通信协议的东西了。Socket本身只是一个信息通道罢了,研发重要的就是定义通信协议。
      

  3.   

    如2楼所说,我们在做socket时,也是先把协议定义好,在一个完整的数据包中,有包头,包尾,校验码,包长度等等,如果一条信息是被分成了几个包发过来的,那还会在中间加上总包号和当前包序号.缓冲区最大设过8K,效果还可以.
      

  4.   

    举个例子:要发一个100M的文件,简单的协议格式“报头-报文长度-控制码-内容-校验码-报尾”:
    发送时:
    先发控制码=1的报文,内容是:我要发的文件名称、总大小、分片大小(或者分成多少片)等等;
    再发控制码=2的报文,内容是:切片序号、大小等等;
    最后发控制码=3的报文,内容是:发送结束等等;当然了,你还可以扩展,接受端报告服务器端我接受的结果怎样,是否需要重发还是补发某个切片呵呵。用这种模式本人成功发送过几百M的大型文件。其实上G的也可以发,只是发送端没有足够的内存切片而已
      

  5.   

    如果你用tcp协议就用TcpClient类
    udp也有对应的类发送:
    第一步,计算你要发送的消息的长度,比如计算结果,这个消息100字节
    第二步,把这个消息的长度用一个固定长度的消息发送出去,比如用一个4字节的int
    第三步,发送消息接收
    第一步,先读取4个字节,转换成int,那么你就知道了接下来要读多少数据,比如说100字节
    第二步,读取100字节,解析BitConverter 转换消息长度是不是说的太罗嗦了,晕。。
      

  6.   

    tcp 协议的消息边界,有三种方法:
    1、固定消息长度
    2、分隔符
    3、消息长度与消息同时发送没别的办法
      

  7.   

    尝试着解析消息,解析失败,就继续接收,解析成功就清空缓存,准备下次接收,再设置一个接收消息的超时时间,超过时间后就当接收失败
    这样只是蒙着来的tcp只有那3种方法确定消息边界