1、服务端的主线程通过List存储每个客户端传过来的Socket。
子线程接收客户端传来的消息,通过遍历List把某一个传过来的消息发送给所有的客户端,实现群聊功能。
2、客户端主线程实现从控制台发送消息
子线程实现接收客户端发来的消息,显示在控制台即可
服务端
public class Server {
public static void main(String[] args) {
try {
ServerSocket ss=new ServerSocket(9999);
List<Socket> li=new ArrayList<>();
while(true){
Socket s=ss.accept();
System.out.println("连接成功");
li.add(s);
new SThread(s, li).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class SThread extends Thread{
private Socket s;
private List<Socket> li;
public SThread(Socket s, List<Socket> li) {
super();
this.s = s;
this.li = li;
}
public void run() {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true){
String SString=br.readLine();
for(Socket s1:li){
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s1.getOutputStream()));
bw.write(SString);
bw.newLine();
bw.flush();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
客户端:
public class Client {
public static void main(String[] args) {
try {
Socket s=new Socket("127.0.0.1",9999);
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
while(true){
new CThread(s).start();
String Scli=br.readLine();
bw.write(Scli);
bw.newLine();
bw.flush();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class CThread extends Thread{
//读取服务端消息
private Socket s;
public CThread(Socket s) {
super();
this.s = s;
}
@Override
public void run() {
try {
BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
while(true){
String Sse=br.readLine();
System.out.println("服务器发来消息:"+Sse);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

本文介绍了一个简单的基于Socket的聊天室程序实现方法。服务端通过主线程接收客户端连接,并使用子线程转发消息;客户端则分别用主线程发送消息、子线程接收消息。这种架构能够轻松实现基本的群聊功能。
1101

被折叠的 条评论
为什么被折叠?



