1、即时通信是什么含义,要实现怎么样的设计?
- 即时通信,是指一个客户端的消息发出去,其他客户端可以接收到
- 即时通信需要进行端口转发的设计思想
- 服务端需要把在线的Socket管道存储起来
- 一旦收到一个消息要推送给其他管道
服务端
package com.csdn.demo07_tcp5_sms;
import java.net.ServerSocket;
import java.util.ArrayList;
public class ServerDemo2 {
public static List allOnlineSockets = new ArrayList<>();
public static void main(String[] args) {
System.out.println("===服务端启动成功===");
ServerSocket serverSocket = new ServerSocket(7777);
Socket socket = serverSocket.accept();
System.out.println(socket.getRemoteSocketAddress() + "上线了,来了老弟!!");
allOnlineSockets.add(socket);
new ServerReaderThread(socket).start();
} catch (IOException e) {
throw new RuntimeException(e);
class ServerReaderThread extends Thread {
public ServerReaderThread(Socket socket) {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((msg = br.readLine()) != null) {
System.out.println(socket.getRemoteSocketAddress() + "发来了:" + msg);
} catch (IOException e) {
System.out.println(socket.getRemoteSocketAddress() + "下线了,下次再来哦,老弟!!");
ServerDemo2.allOnlineSockets.remove(socket);
private void sendMsgToAll(String msg) throws IOException {
for (Socket socket : ServerDemo2.allOnlineSockets) {
PrintStream ps = new PrintStream(socket.getOutputStream());

客户端
package com.csdn.demo07_tcp5_sms;
import java.util.Scanner;
public class ClientDemo1 {
public static void main(String[] args) {
System.out.println("===客户端启动===");
Socket socket = new Socket("127.0.0.1", 7777);
new ClientReaderThread(socket).start();
OutputStream os = socket.getOutputStream();
PrintStream ps = new PrintStream(os);
Scanner sc = new Scanner(System.in);
System.out.println("请说:");
String msg = sc.nextLine();
} catch (IOException e) {
throw new RuntimeException(e);
class ClientReaderThread extends Thread {
public ClientReaderThread(Socket socket) {
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ((line = br.readLine()) != null) {
System.out.println("收到消息" + line);
} catch (IOException e) {
System.out.println("服务器把你踢出去了~~~");
