编写socket代码时客户端Client想要将输入的字符串输出给服务端,而服务端要想接受客户端输出的字符串。
服务端代码如下
package com.server;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(10001);
System.out.println("等待客户端.....");
Socket socket = server.accept();
String msg;
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "utf-8"));
while (null != (msg = br.readLine())) {
System.out.println("客户端: " + msg);
}
}
}
客户端代码如下
package com.client;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 10001);
System.out.println("客户端启动");
System.out.println("请输入:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
PrintWriter pw = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(), "utf-8"));
String msg;
while (null != (msg = br.readLine())) {
pw.println(msg); //此处有坑
pw.flush();
}
}
}
在客户端代码中有一个坑,如果使用PrintWriter类的print()方法就会造成客户端一直处于输入状态不终止的情况,从而服务端就不能接受到客户端输出的字符串,改用println()方法就可以解决此问题。
从api的介绍上可以得知两者的区别:
- print()方法介绍 Prints a string.(打印一个字符串);
- println()方法介绍 Terminates the current line by writing the line separator string.(终止当前行通过编写行分隔符字符串。)