做了一个socket(服务端和客户端开发时都是在WIN2003下) C# .NET2.0
向客户端发送数据时,在VISTA系统中运行就出错
测试了下在XP和2003中运行都没有出错,发送内容一样
比如发送一个字符串,11$123465$456456.在客户端接收时split('$')只能取到11 123465后面的都取不到了
还有问题下在用SOCKET发送长字符串的最好方法是什么?
小弟新手,刚接触SOCKET还请高手多赐教

解决方案 »

  1.   

    缺少通讯协议.不能依赖于每一次发送和接收来帮助你管理数据的分片.TCP协议是一个流协议,必须处理数据沾包和分片到达的情况.
    发送一个ABC,再发送一个DEF
    你不能够认为接收一定是收到了一个ABC,然后再收到一个DEF
    很有可能是先收到AB,然后再收到CDEF,也可能是收到ABCD然后再收到EF,也可能是一次就收到ABCDEF...
      

  2.   

    千万注意的是:
    GetData的第三个参数maxlen,如果它的值小于DataArrival 当中totalBytes 参数值,会把多余的数据丢弃,所以接收的时候最好是按vbByte + vbArray来接收,并且尽可能把totalBytes 全接收完,对于未处理的部分数据缓存下来.
    其实我曾经有回过一份贴子,说得是比较清楚的,但是暂时没有找到相关链接.
      

  3.   

    http://topic.csdn.net/u/20080621/00/3bc3c4af-f010-4113-9780-86f827f1249e.html
      

  4.   


    string recvStr = string.Empty;
     if (clientsocket.Client.Available <= 0)
       {
          return recvStr;
       }
      int bytes;
     byte[] recvBytes = new byte[1024000];
     while (clientsocket.Client.Available > 0)
       {
           bytes = clientsocket.Client.Receive(recvBytes, recvBytes.Length, 0);//从服务器端接受返回信息
            recvStr += Encoding.GetEncoding("GB2312").GetString(recvBytes, 0, bytes);
        }不知道我这样写会不会有问题??