java socket多线程聊天程序
时间: 2023-07-28 18:06:29 浏览: 49
下面是一个简单的 Java socket 多线程聊天程序:
服务端代码:
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class ChatServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("服务器已启动,等待客户端连接...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("客户端已连接:" + socket.getInetAddress().getHostAddress());
new Thread(new ChatHandler(socket)).start();
}
}
private static class ChatHandler implements Runnable {
private Socket socket;
public ChatHandler(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try (InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream()) {
byte[] buffer = new byte[1024];
int len;
while ((len = in.read(buffer)) != -1) {
String msg = new String(buffer, 0, len);
System.out.println("收到客户端消息:" + msg);
out.write(("服务端已收到消息:" + msg).getBytes());
out.flush();
}
} catch (IOException e) {
System.out.println("与客户端断开连接:" + e.getMessage());
}
}
}
}
```
客户端代码:
```java
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.util.Scanner;
public class ChatClient {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 8888);
System.out.println("已连接到服务器:" + socket.getInetAddress().getHostAddress());
try (InputStream in = socket.getInputStream(); OutputStream out = socket.getOutputStream(); Scanner scanner = new Scanner(System.in)) {
while (true) {
System.out.print("请输入消息:");
String msg = scanner.nextLine();
if ("quit".equals(msg)) {
break;
}
out.write(msg.getBytes());
out.flush();
byte[] buffer = new byte[1024];
int len = in.read(buffer);
System.out.println("收到服务端消息:" + new String(buffer, 0, len));
}
} catch (IOException e) {
System.out.println("与服务器断开连接:" + e.getMessage());
}
}
}
```
运行程序后,先启动服务端,然后启动多个客户端,客户端输入消息后,服务端会将消息原样返回给客户端。