通络通信模型
发送方实现
package Liu.UdpTalk;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
public class Talkclient implements Runnable {
BufferedReader buffer = null;
DatagramSocket ds = null;
private int toPort;
private int fromPort;
private String toIP;
public Talkclient(int toPort, int fromPort, String toIP) {
this.toPort = toPort;
this.fromPort = fromPort;
this.toIP = toIP;
try {
ds = new DatagramSocket(this.fromPort);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true) {
buffer = new BufferedReader(new InputStreamReader(System.in));
String data = null;
try {
data = buffer.readLine();
} catch (IOException e) {
e.printStackTrace();
}
DatagramPacket dp = new DatagramPacket(data.getBytes(), 0, data.getBytes().length, new InetSocketAddress(this.toIP, this.toPort));
try {
ds.send(dp);
} catch (IOException e) {
e.printStackTrace();
}
if (data.equals("bye")) {
break;
}
}
ds.close();
}
}
接收方实现
package Liu.UdpTalk;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class TalkSever implements Runnable {
DatagramSocket socket = null;
private int Port;
private String msgFrom;
public TalkSever(int port, String msgFrom) {
this.Port = port;
this.msgFrom = msgFrom;
}
@Override
public void run() {
try {
socket=new DatagramSocket(this.Port);
} catch (SocketException e) {
e.printStackTrace();
}
while (true) {
byte[] container = new byte[100];
DatagramPacket packet = new DatagramPacket(container, 0, container.length);
try {
socket.receive(packet);
} catch (IOException e) {
e.printStackTrace();
}
byte[] Data = packet.getData();
int len = packet.getLength();
String receiveData = new String(Data, 0, len);
System.out.println(this.msgFrom + ":" + receiveData);
if (receiveData.equals("bye")) {
break;
}
}
this.socket.close();
}
}
多线程演示
public class Talk1 {
public static void main(String[] args) throws SocketException {
new Thread(new TalkSever(9999, "老师")).start();
new Thread(new Talkclient(8888, 7777, "127.0.0.1")).start();
}
}
public class Talk {
public static void main(String[] args) throws SocketException {
new Thread(new TalkSever(8888, "学生")).start();
new Thread(new Talkclient(9999, 7776, "127.0.0.1")).start();
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现