网上看到的都是接收端和发送端分开的,不适合我的业务。我想实现这么一个功能,我需要通过udp去收发数据,当我监听一个端口后,会有好多个客户端发来数据,保存这些ip和端口,然后我可以选择每个ip客户端去回复数据,但这个过程中存在一个问题,比如我用udp监听8000端口,回复给客户端的数据必须是通过8000这个端口发出去的,否则客户端接收不到。高手如果可以用swing写一个例子的话,太感激不尽了,可以包含打开,关闭端口,接收到数据后在界面中有个列表显示发来的ip,通过选择这些ip就可以回发数据。可能功能对于大家比较简单,可是对于我这个菜鸟来说,我的确不会,网上的也没有合适的。不知道可以不,可以的话高手发我邮箱吧[email protected]特别感谢,奉上我的所有积分。java  udp通信 求助

解决方案 »

  1.   

    那么主体就这样吧:DatagramSocket socket = new DatagramSocket(PORT));
    // 采用循环接收数据
    while (true) {
        // 读取Socket中的数据,读到的数据放入inPacket封装的数组里
        socket.receive(inPacket);    // 组包,发回给原端口
        outPacket = new DatagramPacket(... , ... , inPacket.getSocketAddress());    // 发送数据
        socket.send(outPacket);
    }
      

  2.   


    非常谢谢,我仔细查看了下只要用一个DatagramSocket来发的话就保证发和接是一个端口。我在看看,如何回复多个客户端,得把ip保存在set中,然后发的时候进行比较在发。应该理论对着。
      

  3.   

    建议尽量用同步处理机制,也就是在一次循环中接收并回复一个客户端,这样你不用解决并发问题。否则要对该Socket的send和receive都做同步保护,有点太复杂了。
      

  4.   

    程序试着写好了,做成swing收发都没问题,想用web通过dwr来调用还是存在一点问题,继续研究下。