使用Socket模拟聊天室
客户端
客户端读线程
public class EchoClientReadThread implements Runnable{
private Socket socket;
private BufferedReader in;
public EchoClientReadThread(Socket socket,BufferedReader in){
this.in = in;
this.socket = socket;
}
@Override
public void run() {
try {
String str = null;
while ((str = in.readLine()) != null){
System.out.println(str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
客户端写线程
public class EchoClientWriteThread implements Runnable{
private PrintWriter out;
private Socket socket;
Scanner scanner;
public EchoClientWriteThread(Socket socket,PrintWriter out,Scanner scanner){
this.scanner = scanner;
this.out = out;
this.socket = socket;
}
@Override
public void run() {
String data =null;
while ((data=scanner.nextLine())!=null){
out.println(data);
}
}
}
客户主函数
public class EchoClient {
public static void main(String[] args) {
String host = "127.0.0.1";
int port = 12345;
try {
Socket socket = new Socket(host,port);
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
Scanner scanner = new Scanner(System.in);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
Thread t1 = new Thread(new EchoClientReadThread(socket,in));
Thread t2 = new Thread(new EchoClientWriteThread(socket,out,scanner));
t1.start();
t2.start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端
服务端线程
public class EchoServerThread implements Runnable{
private ArrayList<Socket> socketarr ;
private Socket socket;
public EchoServerThread(ArrayList Socketarr,Socket socket){
this.socketarr = Socketarr;
this.socket = socket;
}
@Override
public void run() {
try {
InetSocketAddress address = (InetSocketAddress) socket.getRemoteSocketAddress();
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String data = null;
while ((data= in.readLine())!=null){
System.out.println("来自:"+address.getHostName()+":"+address.getPort()
+"的信息:"+data);
for (Socket s:socketarr){
PrintWriter out = new PrintWriter(s.getOutputStream(),true);
out.println("来自:"+address.getHostName()+":"+address.getPort()
+"的信息:"+data);
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
服务端主函数
public class EchoServer {
public static void main(String[] args) {
int port = 12345;
try {
ArrayList<Socket> arrayList = new ArrayList<>();
ServerSocket sst = new ServerSocket(port);
while (true) {
Socket ssc = sst.accept();
InetSocketAddress address = (InetSocketAddress) ssc.getRemoteSocketAddress();
System.out.println(address.getHostName()+":"+address.getPort()+"已连接");
arrayList.add(ssc);
new Thread(new EchoServerThread(arrayList, ssc)).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)