UDP数据报举例
张三和李四使用用户数据报(可用本地机模拟)互相发送和接收数据包,程序运行时"张三"所在主机在命令行输入数据发送给"李四"所在主机,将接收到的数据显示在命令行;同样,"李四"所在主机在命令行输入数据发送给"张三"所在主机,将接收到的数据显示在命令行的右侧。
ZhangSan.java
package UDP;
import java.net.*;
import java.util.*;
public class ZhangSan {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Thread readData;
ReceiveLetterForZhang receiver = new ReceiveLetterForZhang();
try{
readData = new Thread(receiver);
readData.start();//负责接收信息的线程
byte []buffer = new byte[1];
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket dataPack = new DatagramPacket(buffer,buffer.length,address,666);
DatagramSocket postman = new DatagramSocket();
System.out.println("输入发送给李四的信息:");
while (scanner.hasNext()){
String mess = scanner.nextLine();
buffer = mess.getBytes();
if(mess.length()==0){
System.exit(0);
}
buffer = mess.getBytes();
dataPack.setData(buffer);
postman.send(dataPack);
System.out.println("继续输入发送给李四的信息:");
}
}catch (Exception e){
System.out.println(e);
}
}
}
class ReceiveLetterForZhang implements Runnable{
@Override
public void run() {
DatagramPacket pack = null;
DatagramSocket postman = null;
byte data[] = new byte[8192];
try{
pack = new DatagramPacket(data,data.length);
postman = new DatagramSocket(888);
}catch (Exception e){ }
while (true){
if(postman==null){
break;
}else {
try{
postman.receive(pack);
String message = new String(pack.getData(),0,pack.getLength());
System.out.println("收到:"+message);
}catch (Exception e){ }
}
}
}
}
LiSi.java
package UDP;
import java.net.*;
import java.util.*;
public class LiSi {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Thread readData;
ReceiveLetterForLi receiver = new ReceiveLetterForLi();
try{
readData = new Thread(receiver);
readData.start();//负责接收信息的线程
byte []buffer = new byte[1];
InetAddress address = InetAddress.getByName("127.0.0.1");
DatagramPacket dataPack = new DatagramPacket(buffer,buffer.length,address,888);
DatagramSocket postman = new DatagramSocket();
System.out.println("输入发送给张三的信息:");
while (scanner.hasNext()){
String mess = scanner.nextLine();
buffer = mess.getBytes();
if(mess.length()==0){
System.exit(0);
}
buffer = mess.getBytes();
dataPack.setData(buffer);
postman.send(dataPack);
System.out.println("继续输入发送给张三的信息");
}
}catch (Exception e){
System.out.println(e);
}
}
}
class ReceiveLetterForLi implements Runnable{
@Override
public void run() {
DatagramPacket pack = null;
DatagramSocket postman = null;
byte data[] = new byte[8192];
try{
pack = new DatagramPacket(data,data.length);
postman = new DatagramSocket(666);
}catch (Exception e){ }
while (true){
if(postman==null){
break;
}else {
try{
postman.receive(pack);
String message = new String(pack.getData(),0,pack.getLength());
System.out.println("收到:"+message);
}catch (Exception e){ }
}
}
}
}