UDP的双向实现
package Net;
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 TestTwo_waysend implements Runnable{
private DatagramSocket client;
private BufferedReader reader;
private String toIP;
private int toPORT;
public TestTwo_waysend(int port,String toIP,int toPORT) throws Exception{
this.toIP = toIP;
this.toPORT = toPORT;
//1.使用DatagramSocket指定端口 创建发送端
client = new DatagramSocket(port);
//2.准备数据 一定转成成字节数组(可针对数据类型 图片 对象使用IO)
reader = new BufferedReader(new InputStreamReader(System.in));
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true){
String s;
try {
s = reader.readLine();
byte[] b = s.getBytes();
//3.封装成DatagramPacket包裹 需要指定目的地(端口号与接收端一致)
DatagramPacket packet = new DatagramPacket(b,0,b.length,new InetSocketAddress(this.toIP,this.toPORT));
//4.发送包裹send(DatagramPacket)
client.send(packet);
if(s.equals(“bye”)) {
break;
}
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
//5.释放资源
client.close();
}
}
package Net;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
public class TestTwo_wayreceive implements Runnable{
private DatagramSocket server;
public TestTwo_wayreceive(int port){
//1.使用DatagramSocket指定端口 创建接收端
try {
server = new DatagramSocket(port);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
while(true) {
//2.准备容器 一定转成成字节数组(可针对数据类型 图片 对象使用IO)
byte[] b = new byte[1024*60];
DatagramPacket packet = new DatagramPacket(b,0,b.length);
//3.阻塞式接收包裹包裹receive(DatagramPacket)
try {
server.receive(packet);
//4.分析数据
byte[] b1 = packet.getData();
int len = packet.getLength();
String s1 = new String(b1,0,len);
System.out.println(“对方说:”+s1);
if(s1.equals(“bye”)) {
break;
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//5.释放资源
server.close();
}
}
package Net;
public class Two_way1 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// TestTwo_waysend t1 = new TestTwo_waysend(6666,“localhost”,8888);
// Thread t2 = new Thread(t1);
// t2.start();
// TestTwo_wayreceive t3 = new TestTwo_wayreceive(9999);
// Thread t4 = new Thread(t3);
// t4.start();
new Thread(new TestTwo_waysend(6666,“localhost”,8888)).start();
new Thread(new TestTwo_wayreceive(9999)).start();
}
}
package Net;
public class Two_way2 {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
// TestTwo_wayreceive t1 = new TestTwo_wayreceive(8888);
// Thread t2 = new Thread(t1);
// t2.start();
// TestTwo_waysend t3 = new TestTwo_waysend(5555,“localhost”,9999);
// Thread t4= new Thread(t3);
// t4.start();
new Thread(new TestTwo_wayreceive(8888)).start();
new Thread(new TestTwo_waysend(5555,“localhost”,9999)).start();
}
}