UDP双向实现

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();
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于UDP(User Datagram Protocol)实现双向可靠通信需要借助一些机制和算法来确保数据的可靠传输。 首先,双向通信意味着通信的双方都可以发送和接收数据。每个通信实体都需要创建一个UDP Socket,并且绑定相应的IP地址和端口。这样,双方可以互相发送和接收数据。 其次,可靠传输需要使用一些机制来确保数据的完整性和准确性。一种常见的机制是使用序号和确认机制。发送方将数据分割成小的数据包,并为每个数据包添加一个唯一的序号。接收方收到数据包后发送一个确认消息给发送方,确认接收到该数据包。如果发送方没有收到确认消息,它会认为数据包丢失,然后重新发送该数据包。 此外,超时重传机制也是保证数据可靠传输的重要手段。发送方在发送完一个数据包后会启动一个定时器。如果在特定的时间内未收到确认消息,发送方会重新发送数据包,直到收到确认消息或达到最大重传尝试次数。 还可以使用拥塞控制算法来避免网络拥塞。当网络拥塞时,发送方可以降低发送速率,以避免丢包和延迟。 在双向通信中,双方需要相互交流,因此可以采用双工通信模式。双工通信允许双方同时发送和接收数据,这样可以更高效地完成通信。 总结来说,基于UDP实现双向可靠通信需要使用序号和确认机制、超时重传机制、拥塞控制算法和双工通信模式。这些机制和算法的结合可以有效地保证数据的可靠传输和双方通信的顺畅进行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值