【改进版】 Tcp协议服务端和客户端传输数据
前面一个版本的tcp传输 有点问题
1.读取内容 发现如果两端不是同一种编码就会读取乱码,下面改进下可以自定义编码
2.只能读取一种类型编码文本
下面的版本改进编码读取问题,
注意:
读取内容的时候,readlin(),需要发送端那边 结尾加 ”\n“ 换行符,否则会消息阻塞
服务端:
public class tcpServer {
public static void main(String[] args) throws IOException {
// 数据流对象
ServerSocket serverSocket =null;
OutputStream outputStream =null;
DataOutputStream dataOutputStream=null;
Socket socket =null;
InputStream inputStream =null;
DataInputStream dataInputStream =null;
// ======================================================
try {
serverSocket = new ServerSocket(8080);//创建服务器端口
System.out.println("---微信java服务端已启动---");
// 让服务器循环,一直处理
while (true){
socket = serverSocket.accept();//接收并返回一个对象
// 取出消息
inputStream = socket.getInputStream();//获取客户
// System.out.println("客户已连接");
// 封装进入的信息
BufferedReader str = new BufferedReader(new InputStreamReader(inputStream, "gbk"));
String msg;
while ((msg=str.readLine()) !=null){
msg += str.readLine();
System.out.println("消息日志["+msg+"]");//打印微信消息日志
outputStream= socket.getOutputStream();
// 收到日志后进行处理
System.out.println(wxid);//打印客户信息
dataOutputStream= new DataOutputStream(outputStream);
String response= "helloaaaaaaaaaaaaaaaaaaaaaaa是是是";
dataOutputStream.writeUTF(response);//返回数据
}
// msg = str.lines().collect(Collectors.joining());
// System.out.println("输入进入的信息:");
// System.out.println("接收到了客户端请求:"+msg);
// 返回消息给客户端
// dataOutputStream.writeUTF(response);
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
serverSocket.close();
socket.close();
inputStream.close();
dataInputStream.close();
}
}
}