服务器
public class SocketServer {
private static ExecutorService executeService = Executors.newCachedThreadPool();
public static void main(String[] args) throws IOException {
//创建socket服务,监听10101端口
ServerSocket server=new ServerSocket(12345);
System.out.println("服务器启动!");
while(true){
// 获取一个套接字(阻塞)
final Socket socket = server.accept();
System.out.println("开始处理通信");
new Thread(new ServerHandler(socket)).start();
//伪异步实现
//executeService.submit(new ServerHandler(socket));
}
}
}
Socket Handler
public class ServerHandler implements Runnable{
private Socket socket;
public ServerHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
DataInputStream input = new DataInputStream(socket.getInputStream());
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
System.out.println("接收到的客户端消息为:" + input.readUTF());
Thread.sleep(3000);
//发送消息
out.writeUTF("已收到消息");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
System.out.println("socket关闭");
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
客户端:
public class SocketClient {
/**
* 服务器地址
*/
public static final String IP_ADDR = "localhost";
/**
* 服务器端口号
*/
public static final int PORT = 12345;
public static void main(String[] args) {
System.out.println("客户端启动");
Socket socket = null;
try {
//创建一个流套接字并将其连接到指定主机上的指定端口号
socket = new Socket(IP_ADDR, PORT);
//读取服务器端数据
DataInputStream input = new DataInputStream(socket.getInputStream());
//向服务器端发送数据
DataOutputStream out = new DataOutputStream(socket.getOutputStream());
String str = "helloworld";
out.writeUTF(str);
String ret = input.readUTF();
System.out.println("服务器端返回过来的是: " + ret);
out.close();
input.close();
} catch (Exception e) {
System.out.println("客户端异常:" + e.getMessage());
} finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
socket = null;
System.out.println("客户端 finally 异常:" + e.getMessage());
}
}
}
}
}