模仿客户端与服务器进行socket交互(TCP协议)多线程及字节流优化
/**
* TCP协议演示 客户端
*
* @author JerichoPH
*/
public class Demo_TCP_Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("127.0.0.1", 6666); // 创建客户端socket
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 将字节流包装成字符流
PrintStream ps = new PrintStream(socket.getOutputStream()); // printstream中有输出换行的方法
System.out.println(br.readLine()); // 读取服务器端发送的信息
ps.println("客户端发送的信息"); // 向服务器发送信息
socket.close(); // 客户端关闭socket连接。关闭socket就同时关闭了流,所以不需要单独关闭BufferReader InputStreamReader
}
}
/**
* TCP协议演示 服务端
*
* @author JerichoPH
*/
public class Demo_TCP_Server {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(6666); // 创建服务器端socket
while (true) {
final Socket socket = server.accept(); // 接受客户端请求
new Thread() {
@Override
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 将字节流包装成字符流
PrintStream ps = new PrintStream(socket.getOutputStream()); // PrintStream中有写出换行的方法
ps.println("欢迎访问"); // 向客户端发送信息
System.out.println(br.readLine()); // 接收客户端发来的消息
socket.close(); // 服务器关闭socket,但是不能关闭server。 关闭socket就同时关闭了流,所以不需要单独关闭BufferReader InputStreamReader
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
}
}