Java IO操作——BufferedReader(缓冲区读取内容,避免中文乱码)
Buffer:表示缓冲区的。之前的StringBuffer,缓冲区中的内容可以更改,可以提高效率。
如果想接收任意长度的数据,而且避免乱码的产生,就可以使用BufferedReader。
public class BufferedReader extends Reader
因为输入的数据有可能出现中文,所以此处使用字符流完成
System.in本身表示的是InputStream(字节流),现在要求接收的是一个字符流,需要将字节流转为字符流才可以,InputStreamReader。
Java基础——TCP通信_tcp java 客户端_花楠拾的博客-CSDN博客
TCP服务端创建:(一发一收)
public class TcpSever {
public static void main(String[] args) throws IOException {
System.out.println("===服务端启动成功===");
// 1、注册端口
ServerSocket server = new ServerSocket(999);
// 2、必须调用accept方法:等待接收客户端的Socket连接请求,建立Socket通信管道
Socket socket = server.accept();
// 3、从socket通信管道中得到一个字节输入流
InputStream in = socket.getInputStream();
// 4、把字节输入流包装成缓冲字符输入流进行消息的接收
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// 5、按照行读取消息
String msg = br.readLine();
if(null != msg){
System.out.println(socket.getLocalPort() + "说了:" + msg);
}
}
}
TCP服务端创建:(多线程N-N)
public class TcpServerThreadPool {
// 使用静态变量记住一个线程池对象
private static ExecutorService pool = new ThreadPoolExecutor(300,
1500, 6, TimeUnit.SECONDS,
new ArrayBlockingQueue<>(50)
, Executors.defaultThreadFactory(), new ThreadPoolExecutor.AbortPolicy());
public static void main(String[] args) throws IOException {
System.out.println("===服务端启动成功===");
// 1、注册端口
ServerSocket server = new ServerSocket(985);
// a.定义一个死循环由主线程负责不断的接收客户端的Socket管道连接。
while (true){
// 2、每接收到一个客户端的Socket管道,
Socket socket = server.accept();
System.out.println(socket.getRemoteSocketAddress()+ "它来了,上线了!");
// 任务对象负责读取消息。
Runnable tagger = new ServerReaderRunnable(socket);
pool.execute(tagger);
}
}
public class ServerReaderRunnable implements Runnable{
private Socket socket;
public ServerReaderRunnable (Socket socket){
this.socket = socket;
}
@Override
public void run() {
System.out.println(new Thread().getName());
// 3、从socket通信管道中得到一个字节输入流
try {
InputStream in = socket.getInputStream();
// 4、把字节输入流包装成缓冲字符输入流进行消息的接收
BufferedReader br = new BufferedReader(new InputStreamReader(in));
// 5、按照行读取消息
String msg = br.readLine();
if (null != msg){
System.out.println(socket.getRemoteSocketAddress() + "说了:: " + msg);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}