聊天系统UDP TCP

服务端

package work;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.util.ArrayList;

import java.util.List;

public class UDPServer {

private static final int PORT = 9876;

private static List<ClientInfo> clients = new ArrayList<>();

public static void main(String\[\] args) {

try {

DatagramSocket socket = new DatagramSocket(PORT);

System.out.println("UDP 服务器在端口上运行 " + PORT);

while (true) {

byte\[\] receiveData = new byte1024;

DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

socket.receive(receivePacket);

String message = new String(receivePacket.getData(), 0, receivePacket.getLength());

System.out.println("收到来自 " + receivePacket.getAddress() + ": " + message);

// Broadcast message to all clients

broadcastMessage(message, receivePacket.getAddress(), receivePacket.getPort());

}

} catch (Exception e) {

e.printStackTrace();

}

}

private static void broadcastMessage(String message, java.net.InetAddress address, int port) {

for (ClientInfo client : clients) {

try {

DatagramSocket clientSocket = new DatagramSocket();

byte\[\] sendData = message.getBytes();

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, client.getAddress(), client.getPort());

clientSocket.send(sendPacket);

clientSocket.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

private static class ClientInfo {

private java.net.InetAddress address;

private int port;

public ClientInfo(java.net.InetAddress address, int port) {

this.address = address;

this.port = port;

}

public java.net.InetAddress getAddress() {

return address;

}

public int getPort() {

return port;

}

}

}

客服端口

package work;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

public class TCPClient {

public static void main(String\[\] args) {

final String serverAddress = "localhost";

final int serverPort = 12345;

try (Socket socket = new Socket(serverAddress, serverPort)) {

BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);

// 从服务器接收消息并显示

new Thread(() -> {

try {

String message;

while ((message = reader.readLine()) != null) {

System.out.println("服务器: " + message);

}

} catch (IOException e) {

e.printStackTrace();

}

}).start();

// 从控制台读取输入并发送给服务器

BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));

String consoleInput;

while ((consoleInput = consoleReader.readLine()) != null) {

writer.println(consoleInput);

}

} catch (IOException e) {

e.printStackTrace();

}

}

}

结果:

UDP

客户端

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.util.ArrayList;

import java.util.List;

public class UDPServer {

private static final int PORT = 9876;

private static List<ClientInfo> clients = new ArrayList<>();

public static void main(String\[\] args) {

try {

DatagramSocket socket = new DatagramSocket(PORT);

System.out.println("UDP Server is running on port " + PORT);

while (true) {

byte\[\] receiveData = new byte1024;

DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

socket.receive(receivePacket);

String message = new String(receivePacket.getData(), 0, receivePacket.getLength());

System.out.println("Received from " + receivePacket.getAddress() + ": " + message);

// Broadcast message to all clients

broadcastMessage(message, receivePacket.getAddress(), receivePacket.getPort());

}

} catch (Exception e) {

e.printStackTrace();

}

}

private static void broadcastMessage(String message, java.net.InetAddress address, int port) {

for (ClientInfo client : clients) {

try {

DatagramSocket clientSocket = new DatagramSocket();

byte\[\] sendData = message.getBytes();

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, client.getAddress(), client.getPort());

clientSocket.send(sendPacket);

clientSocket.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

private static class ClientInfo {

private java.net.InetAddress address;

private int port;

public ClientInfo(java.net.InetAddress address, int port) {

this.address = address;

this.port = port;

}

public java.net.InetAddress getAddress() {

return address;

}

public int getPort() {

return port;

}

}

}

服务端

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.util.Scanner;

public class UDPClient {

private static final int PORT = 9876;

public static void main(String\[\] args) {

try {

Scanner scanner = new Scanner(System.in);

System.out.print("Enter your name: ");

String name = scanner.nextLine();

DatagramSocket socket = new DatagramSocket();

InetAddress serverAddress = InetAddress.getByName("localhost");

Thread receiveThread = new Thread(() -> {

try {

byte\[\] receiveData = new byte1024;

DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

while (true) {

socket.receive(receivePacket);

String message = new String(receivePacket.getData(), 0, receivePacket.getLength());

System.out.println(message);

}

} catch (Exception e) {

e.printStackTrace();

}

});

receiveThread.start();

while (true) {

String message = scanner.nextLine();

String formattedMessage = name + ": " + message;

byte\[\] sendData = formattedMessage.getBytes();

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, PORT);

socket.send(sendPacket);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

相关推荐
可爱系程序猿1 小时前
Windows 11 添加共享打印机提示 0x00000bc4:从 RPC 发现到策略配置排查
windows·网络协议·rpc
草莓熊Lotso1 天前
【Redis 初阶】Set 类型深度解析:去重集合的运算能力与实战场景
linux·网络·数据库·windows·redis·tcp/ip·缓存
kekekzt1 天前
TCP协议的粘包问题介绍,IP分片,MTU,MSS,滑动窗口的概念及之间的关系
网络·网络协议·tcp/ip
Learn-Share_HY2 天前
[IT Network]如何配置反向路徑過濾器(rp_filter),以解決路由不對稱問題?
linux·嵌入式硬件·物联网·网络协议·tcp/ip·http·iot
小镇敲码人2 天前
【深入浅出】之Qt 事件系统实战:鼠标、键盘、滚轮、窗口与定时器事件
数据库·qt·网络协议·mysql·http
K成长日志2 天前
BLE不可连接状态--广播态
物联网·网络协议·蓝牙·低功耗·iot·ble
Fxkj8882 天前
企业新媒体IP陪跑真实价值解析:合作体验与效果评判标准
大数据·人工智能·tcp/ip·媒体
DevOpenClub2 天前
全球区域与 IP 定位工作台案例方案
大数据·网络·网络协议·tcp/ip
wuyk5552 天前
从零吃透 Modbus 通信|第 6 章:线圈功能码 05/0F 实现 & Modbus‑TCP 基础入门
c语言·网络·网络协议·tcp/ip
Titan20242 天前
HTTPS基础知识梳理
服务器·网络·c++·网络协议·学习·http·https