请教各位Socket方面的问题:
使用tcp协议
服务端接收回调函数ReceiveCallBack中
接收缓冲区byte[] b = new byte[2],
a客户端发送了:abc,b客户端发送了:def
因为tcp消息是连续的,服务端会不会接受了a后又接受了d,
这样我怎么区分得到abc和def?
定义接收缓冲区的大小有什么要求和习惯吗?
谢谢各位。

解决方案 »

  1.   

    tcp中的问题就是消息没有边界,四种种方法
    1  使用固定长度:最简单但是有可能是最昂贵的方案,设计一种协议,永远以固定长度传递消息
    2  使用消息尺寸:在消息包之前先传送该消息的长度,然后根据长度创建缓冲区大小,并接收数据
    3  使用消息标记:在系统中定义一个字符作为消息结束的标记,接收端逐字节接收,当收到标记后将前面收到的数据组合
    4  使用C#流  NetWorkStream类
    建议楼主看看《C#网络应用编程》,里面有详细介绍,如果需要,给我邮件,我发电子书给你,这本书已经绝版了
    [email protected]
      

  2.   

    to:tellyes 
    我是lz,谢谢你的回答。
    我的邮件:[email protected]
    谢谢。
      

  3.   

    a客户端发送了:abc,b客户端发送了:def 
    因为tcp消息是连续的,服务端会不会接受了a后又接受了d, 
    ----------
    当然会...你是两个客户端...接受消息是的两个独立线程...两个独立的缓冲区...它同时接受也不用你操心...跟消息边界扯不上关系...
      

  4.   

    to:vrhero
    跟消息边界扯不上关系...
    ----------------
    tcp消息边界是怎么回事?我感觉特别晕
      

  5.   

    a客户端发送了:abc,b客户端发送了:def 
    因为tcp消息是连续的,服务端会不会接受了a后又接受了d, 
    这样我怎么区分得到abc和def? 两个客户端连接就是两个线程,看你有回调应该是异步通信,用socket句柄去区分
      

  6.   

    这个其实很简单么,你接受到最后用split截字符串不可以了!要不就是用SUBSTRING来获取一个子字符串!