双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

JAVA 基于UDP的多客户端和一个服务器的问题,服务端不能转发消息

hsw0922 hsw0922 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketAddress;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;

public class Server {
private List<SocketAddress> all = new ArrayList<SocketAddress>();

public static void main(String args) throws IOException {
new Server().start();
}

public void start() {
try {
DatagramSocket server = new DatagramSocket(30003);
while(true) {
MyChannel channel = new MyChannel(server);
new Thread(channel).start();

}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private class MyChannel implements Runnable{
private DatagramSocket server;
private DatagramPacket packet;
public MyChannel(DatagramSocket server) {
this.server = server;
try {
byte container = new byte;
packet =new DatagramPacket(container,container.length);
server.receive(packet);
SocketAddress address = packet.getSocketAddress();
all.add(address); //加入到容器
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

private String receive() {
String msg;
msg = new String(packet.getData(),0,packet.getLength());
return msg;
}

@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(receive());
sendOthers(packet);
}

private void sendOthers(DatagramPacket dp) {
//String msg = receive();
//遍历容器
for(SocketAddress sa:all) {
try {
String str = new String(dp.getData(),0,dp.getLength());
DatagramPacket dd = new DatagramPacket(str.getBytes(),str.getBytes().length,sa);
server.send(dd);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

}
}



不知道问题出在哪里,debug模式下容器里是有地址的,但是消息没有按地址转发过去
...全文
评论 2
收藏 已收藏
分享
返回顶部
hsw0922
Java 51,407 成员 86,135 内容