一、问题描述:
socket通信中经常会遇到返回报文接收不全甚至完全没有接收到的问题。
二、解决方案:
发送方在报文头用固定长度的字节声明该报文正文长度,注意这里的报文正文不包括表示报文长度的字符串本身。接收方在接收报文时先按约定读取报文长度的声明,转换为数字类型,再根据该长度读取报文内容,以避免漏读的情况。
三、代码实现(Java):
以8位长度的报文头表示报文正文长度为例,此时报文接收方的示例代码如下:
import java.io.*;
import java.net.Socket;
/**
* Created by linghan on 2018/12/20.
*/
public class SocketClient{
public static String ReceiveXml(){
DataOutputStream out = null;
Socket socket = null;
BufferedWriter bufferedWriter = null;
String returnXml="";
try {
socket = new Socket("localhost", 9999);
int headLen = 8; //约定的报文头长度
char [] xmlLen = new char[headLen];
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader