废话不多说直接看代码
定义发送端
package com.sky.wechat;
import java.io.IOException;
import java.net.*;
import java.util.Scanner;
public class SendTask implements Runnable{
private int sendPort; //发送数据的端口
public SendTask(int sendPort){
this.sendPort = sendPort;
}
@Override
public void run() {
DatagramSocket ds = null;
try {
ds= new DatagramSocket();
Scanner sc = new Scanner(System.in);
while(true){
String s = sc.nextLine();
byte[] buf = s.getBytes();
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(buf, buf.length,address,sendPort);
ds.send(dp); //发送数据
}
} catch (SocketException | UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
// ds.close();
}
}
}
定义接收端
package com.sky.wechat;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class ReceiveTask implements Runnable{
private int receivePort;
public ReceiveTask(int receivePort){
this.receivePort = receivePort;
}
@Override
public void run() {
DatagramSocket ds = null;
try {
ds = new DatagramSocket(receivePort);
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf, buf.length);
while (true){
ds.receive(dp); // 接收数据
String msg = new String(dp.getData(),0, dp.getLength());
System.out.println("收到:"+dp.getAddress().getHostAddress()+"--发送的数据是:"+msg);
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
// ds.close();
}
}
}
发送端口和接受端口均在构造方法里初始化,所以接下来我们定义的用户中需要手动输入自己的端口和目标端口来建立连接
这里建立User01和User02两个类
package com.sky.wechat;
import java.util.Scanner;
public class User01 {
public static void main(String[] args) {
System.out.println("+++++++++++欢迎使用威信+++++++++++");
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的威信号");
int sendPort = scanner.nextInt();
System.out.println("请输入要联系的威信号");
int receivePort = scanner.nextInt();
System.out.println("威信聊天系统启动");
//发送数据的操作
new Thread(new SendTask(sendPort)).start();
//接受数据的操作
new Thread(new ReceiveTask(receivePort)).start();
}
}
用户02 和用户01 的代码段是一摸一样的,这样就实现类基于UDP的网络通信
看效果图



