1. 創建服務端
要求:
(1)服務端一直接聽客戶端。
(2)當每一個客戶端與服務端建立連接後,服務端都新建一個線程
(3)線程讀取客戶端發送的請求,打印輸出
package com.wx.socket;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class IOServer {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8088);
//接收新連接線程
new Thread(()->{
while(true){
try{
//(1)阻塞方法獲取新的連接
System.out.println("正在建立連接。。。。");
Socket socket = serverSocket.accept();
//(2) 每個新的連接都創建一個線程,負責數據讀取
new Thread(()->{
try{
byte[] bytes = new byte[1024];
InputStream inputStream = socket.getInputStream();
while(true){
int len = 0;
while((len = inputStream.read(bytes)) != -1){
System.out.println("服務器 "+Thread.currentThread().getName()+" 接收客戶端消息:"+new String(bytes,0,len));
}
}
}catch (Exception e){
}
}).start();
}catch (Exception e){
}
}
}).start();
}
}
2. 創建客戶端
要求:
(1)建立線程
(2)給服務端發送消息
package com.wx.socket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
public class IOClient {
public static void main(String[] args) {
new Thread(()->{
try{
Socket socket = new Socket("localhost",8088);
while(true){
socket.getOutputStream().write((Thread.currentThread().getName()+" "+new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())+": Hello world").getBytes());
socket.getOutputStream().flush();
Thread.sleep(2000);
}
}catch (Exception e){
}
}).start();
}
}