在今天的Java学习中,我深入探索了TCP通信技术,并将其应用于群聊程序的开发,同时了解了TCP通信的BS架构。以下是我的学习总结与技术分享。
TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。它的主要特点包括:
这些特点使得TCP适用于需要高可靠性的应用场景,如文件传输、网页浏览和即时通讯等。
基于TCP通信,我开发了一个简单的群聊程序,包括服务器端和客户端。
服务器端的主要功能是监听客户端的连接请求,并在客户端之间转发消息。以下是服务器端的关键代码结构:
private ServerSocket serverSocket;
private List clientList = Collections.synchronizedList(new ArrayList<>());
public GroupChatServer(int port) {
try {
serverSocket = new ServerSocket(port);
System.out.println("服务器已启动,端口号:" + port);
waitForConnection();
} catch (IOException e) {
e.printStackTrace();
}
}
作者:java修仙传
链接:https://www.nowcoder.com/discuss/728715193961746432?sourceSSR=users
来源:牛客网
private void waitForConnection() {
while (true) {
try {
Socket socket = serverSocket.accept();
clientList.add(socket);
new Thread(new ClientHandler(socket)).start();
} catch (IOException e) {
e.printStackTrace();
}
}
}
作者:java修仙传
链接:https://www.nowcoder.com/discuss/728715193961746432?sourceSSR=users
来源:牛客网
private class ClientHandler implements Runnable {
private Socket socket;
private BufferedReader reader;
public ClientHandler(Socket socket) {
this.socket = socket;
try {
reader = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
}
作者:java修仙传
链接:https://www.nowcoder.com/discuss/728715193961746432?sourceSSR=users
来源:牛客网
@Override
public void run() {
String message;
try {
while ((message = reader.readLine()) != null) {
broadcastMessage(message); // 核心消息分发逻辑
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
socket.close();
clientList.remove(socket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void broadcastMessage(String message) {
synchronized (clientList) {
for (Socket client : clientList) {
try {
PrintWriter writer = new PrintWriter(
client.getOutputStream(), true);
writer.println(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
作者:java修仙传
链接:https://www.nowcoder.com/discuss/728715193961746432?sourceSSR=users
来源:牛客网
关键设计亮点:
客户端负责连接到服务器,并发送和接收消息。以下是客户端的关键代码结构:
public GroupChatClient(String host, int port) {
try {
socket = new Socket(host, port); // 连接服务器
writer = new PrintWriter(socket.getOutputStream(), true); // 输出流初始化
new Thread(new MessageReader(socket)).start(); // 启动消息接收线程
} catch (IOException e) {
e.printStackTrace();
}
}
作者:java修仙传
链接:https://www.nowcoder.com/discuss/728715193961746432?sourceSSR=users
来源:牛客网
private class MessageReader implements Runnable {
private BufferedReader reader;
public MessageReader(Socket socket) {
try {
reader = new BufferedReader( // 输入流初始化
new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void run() { // 持续监听服务器消息
String message;
try {
while ((message = reader.readLine()) != null) {
System.out.println("收到服务器消息:" + message); // 消息展示
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
作者:java修仙传
链接:https://www.nowcoder.com/discuss/728715193961746432?sourceSSR=users
来源:牛客网
public static void main(String[] args) {
GroupChatClient client = new GroupChatClient("localhost", 8888);
Scanner scanner = new Scanner(System.in);
while (true) {
String input = scanner.nextLine(); // 读取用户输入
client.sendMessage(input); // 发送消息
}
}
作者:java修仙传
链接:https://www.nowcoder.com/discuss/728715193961746432?sourceSSR=users
来源:牛客网
[用户输入] -> sendMessage() -> 输出流 -> 服务器
服务器 -> 输入流 -> MessageReader线程 -> 控制台输出
关键设计特点:
启动服务器后,多个客户端可以连接到服务器,并在群聊中发送和接收消息。每个客户端发送的消息都会被服务器转发给所有其他客户端,实现群聊功能。
BS(浏览器/服务器)架构是一种基于Web的应用架构,客户端通过浏览器访问服务器上的应用程序。在TCP通信中,BS架构具有以下特点:
在BS架构中,TCP通信通常用于实现浏览器与服务器之间的数据传输。例如,HTTP协议就是基于TCP的,用于浏览器与Web服务器之间的通信。
通过今天的学习,我对TCP通信技术有了比较深入的理解,并成功将其应用于群聊程序的开发。今日修炼就到此为止,但学习之路永无止境。希望以后能和大家一起进步。
作者:java修仙传
链接:今日学习之 Java TCP通信技术与群聊程序开发_牛客网
来源:牛客网