我使用如下方法来接收客户端发来的字符串:bis = new BufferedInputStream(socket.getInputStream());
byte[] b = new byte[1024];
int i = bis.read(b);
String str = new String(b, 0, i, "UTF-8");
当客户端连续发送两次字符串,比如DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
dos.write(b1);
dos.write(b2);
则我的服务器端收到的会是b1+b2(也就是两个字符串连起来了)。
有什么办法能保证两个字符串在服务端收到的还是两个字符串吗?
因为之后客户端要用C#来编写,所以我这里是不是只能用byte来接收了?

解决方案 »

  1.   

    一般用 socket 通信有封包解包的过程在处理 String 的时候, 封包采取用 short 或者 int 占位保存要传输的String的长度解包采取 先读取 String长度,再根据长度往后读相应的StringTCP还要考虑粘包、错包的问题
      

  2.   

    改成以下:
    DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
    dos.write(b1);
    dos.flush();
    dos.write(b2);
    dos.flush();
      

  3.   

    TCP就是流格式的,多次发送一次读取是正常的。