一,发送器代码
package net.ittimeline.java.network.socket.udp.talk;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
/**
* 发送端
*/
public class TalkSend implements Runnable {
private DatagramSocket client;
private int port;
private String toIp;
private int toPort;
private BufferedReader reader;
private String msg;
private byte[] datas;
private DatagramPacket packet;
public TalkSend(int port, String toIp, int toPort) {
this.port = port;
this.toIp = toIp;
this.toPort = toPort;
try {
this.client = new DatagramSocket(port);
this.reader = new BufferedReader(new InputStreamReader(System.in));
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while (true){
if(null == this.client || null == this.reader){
break;
}
try {
this.msg = this.reader.readLine();
this.datas = this.msg.getBytes();
packet = new DatagramPacket(
this.datas,
0,
this.datas.length,
new InetSocketAddress(this.toIp, this.toPort)
);
this.client.send(packet);
if(this.msg.equals("bye")){
break;
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
if(null != this.client){
this.client.close();
}
}
}
二, 接收器代码
package net.ittimeline.java.network.socket.udp.talk;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* 接收端
*/
public class TalkReceive implements Runnable{
private DatagramSocket server;
private int port;
private byte[] container;
private byte[] datas;
private int len;
private String msg;
private DatagramPacket packet;
public TalkReceive(int port){
this.port = port;
try {
this.server = new DatagramSocket(port);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void run() {
while(true){
if(null == this.server){
break;
}
this.container = new byte[1024 * 60];
this.packet = new DatagramPacket(this.container,0,this.container.length);
try {
this.server.receive(this.packet);
this.datas = this.packet.getData();
this.len = this.packet.getLength();
this.msg = new String(this.datas, 0, this.len);
System.out.println(this.msg);
if(this.msg.equals("bye")){
break;
}
} catch (IOException e) {
e.printStackTrace();
}
}
if(null != this.server){
this.server.close();
}
}
}
三,调用
1, 场景
实现老师与学生间的聊天
2,老师代码
package net.ittimeline.java.network.socket.udp.talk;
public class TalkTeacher {
public static void main(String[] args) {
new Thread(new TalkReceive(9999)).start();//接收
new Thread(new TalkSend(4444,"localhost",8888)).start();//发送
}
}
3, 学生代码
package net.ittimeline.java.network.socket.udp.talk;
public class TalkStudent {
public static void main(String[] args) {
new Thread(new TalkSend(7777, "localhost",9999)).start();//发送
new Thread(new TalkReceive(8888)).start();
}
}