java实现udp服务器_如何在Java中实现基于线程的UDP服务器?

小编典典

此设计在一定程度上取决于每个完整的UDP“对话”是否仅需要单个请求和立即响应,是单个请求还是带有重传的响应,或者是否需要为每个客户。

我编写的RADIUS服务器具有单个请求+重传模型,并为每个传入数据包生成了一个线程。

DatagramPacket接收到每个消息后,将其传递到新线程,然后该线程负责发送回响应。这是因为生成每个响应所涉及的计算和数据库访问可能会花费相对较长的时间,并且生成线程比使用某种其他机制来处理仍在处理旧数据包的新数据包要容易得多。

public class Server implements Runnable {

public void run() {

while (true) {

DatagramPacket packet = socket.receive();

new Thread(new Responder(socket, packet)).start();

}

}

}

public class Responder implements Runnable {

Socket socket = null;

DatagramPacket packet = null;

public Responder(Socket socket, DatagramPacket packet) {

this.socket = socket;

this.packet = packet;

}

public void run() {

byte[] data = makeResponse(); // code not shown

DatagramPacket response = new DatagramPacket(data, data.length,

packet.getAddress(), packet.getPort());

socket.send(response);

}

}

2020-10-20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值