我们利用多线程的方式实现两个客户端实现通信,一个程序的有两个线程分别完成接收和发送数据报
这样两个程序一同运行时,也就实现了互相通信
比较需要注意的一点就是端口要互相对应,分别完成发送和传输数据
同一个程序的两个线程当然也是可以互相通信的。
下面看代码
客户端一:
import java.io.*;
import java.net.*;
class practice1
{
public static void main(String[] args) throws Exception
{
MySocket mt = new MySocket();
Thread t = new Thread(mt);
t.start();
DatagramSocket socket = new DatagramSocket();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//读取从键盘传入的内容
String line = null;
while((line = br.readLine())!=null){
byte[] arr = line.getBytes();
//数据报包打包
DatagramPacket packet = new DatagramPacket(arr,arr.length,InetAddress.getByName("10.0.185.21"),10000);
//此处的IP地址是我本机的地址
socket.send(packet);
}
}
}
class MySocket implements Runnable
{
public void run(){
try{
DatagramSocket socket = new DatagramSocket(11111);
while(true){
byte[] arr = new byte[1024];
DatagramPacket packet = new DatagramPacket(arr,arr.length);
socket.receive(packet);
//此处是获取数据报的一些信息,用于打印
String content = new String(packet.getData(),0,packet.getLength());
String ip = packet.getAddress().getHostAddress();
System.out.println(ip+" "+content);
}
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
}
客户端二:
import java.io.*;
import java.net.*;
class practice2
{
public static void main(String[] args) throws IOException
{
//InetAddress inet = InetAddress.getLocalHost();
//String ip = inet.getHostAddress();
MySocket mt = new MySocket();
Thread t = new Thread(mt);
t.start();
DatagramSocket socket = new DatagramSocket(10000);
while(true){
byte[] arr = new byte[1024];
DatagramPacket packet = new DatagramPacket(arr,arr.length);
socket.receive(packet);
String content = new String(packet.getData(),0,packet.getLength());
String ip = packet.getAddress().getHostAddress();
System.out.println(ip+" "+content);
}
}
}
class MySocket implements Runnable
{
public void run(){
try{
DatagramSocket socket = new DatagramSocket();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = null;
while((line = br.readLine())!=null){
byte[] arr = line.getBytes();
DatagramPacket packet = new DatagramPacket(arr,arr.length,InetAddress.getByName("10.0.185.21"),11111);
socket.send(packet);
}
}
catch(Exception e){
System.out.println("找不到发送方");
}
}
}
水平有限,望指正。