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

hsw0922 2018-06-28 08:55:28
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模式下容器里是有地址的,但是消息没有按地址转发过去
...全文
185 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsw0922 2018-06-28
  • 打赏
  • 举报
回复
引用 1 楼 verejava 的回复:
发送的时候需要设置接送端 的 端口号和 IP

Java 网络编程 之 UDP

http://www.verejava.com/?id=16994911008925


获取了客户端的IP和端口,都存在容器里了, 然后发送时遍历了容器里的IP和端口
,,
但是客户端只能收到自己发送的消息
verejava 2018-06-28
  • 打赏
  • 举报
回复
发送的时候需要设置接送端 的 端口号和 IP

Java 网络编程 之 UDP

http://www.verejava.com/?id=16994911008925

51,396

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧