当前位置:编程学习 > JAVA >>

java udp通信求助

网上看到的都是接收端和发送端分开的,不适合我的业务。

我想实现这么一个功能,我需要通过udp去收发数据,当我监听一个端口后,会有好多个客户端发来数据,保存这些ip和端口,然后我可以选择每个ip客户端去回复数据,但这个过程中存在一个问题,比如我用udp监听8000端口,回复给客户端的数据必须是通过8000这个端口发出去的,否则客户端接收不到。

高手如果可以用swing写一个例子的话,太感激不尽了,可以包含打开,关闭端口,接收到数据后在界面中有个列表显示发来的ip,通过选择这些ip就可以回发数据。

可能功能对于大家比较简单,可是对于我这个菜鸟来说,我的确不会,网上的也没有合适的。

不知道可以不,可以的话高手发我邮箱吧125208162@qq.com

特别感谢,奉上我的所有积分。 java  udp通信 求助 --------------------编程问答--------------------

等待楼下有时间写的同志 --------------------编程问答--------------------
引用 1 楼 shadowsick 的回复:


等待楼下有时间写的同志


哎,确实耽搁大家的时间,估计没人帮我都。 --------------------编程问答-------------------- 为啥回覆也必须用8000端口来发送?这是客户神奇的要求,还是你自己的要求?

求含界面完整代码的话,怕是很难有人帮你。 --------------------编程问答--------------------
引用 3 楼 ldh911 的回复:
为啥回覆也必须用8000端口来发送?这是客户神奇的要求,还是你自己的要求?

求含界面完整代码的话,怕是很难有人帮你。


跟硬件通信,必须是从监听的端口发出去的,没有界面也可以的。 --------------------编程问答-------------------- 那么主体就这样吧:

DatagramSocket socket = new DatagramSocket(PORT));
// 采用循环接收数据
while (true) {
    // 读取Socket中的数据,读到的数据放入inPacket封装的数组里
    socket.receive(inPacket);

    // 组包,发回给原端口
    outPacket = new DatagramPacket(... , ... , inPacket.getSocketAddress());

    // 发送数据
    socket.send(outPacket);
}
--------------------编程问答--------------------
引用 5 楼 ldh911 的回复:
那么主体就这样吧:

DatagramSocket socket = new DatagramSocket(PORT));
// 采用循环接收数据
while (true) {
    // 读取Socket中的数据,读到的数据放入inPacket封装的数组里
    socket.receive(inPacket);

    // 组包,发回给原端口
    outPacket = new DatagramPacket(... , ... , inPacket.getSocketAddress());

    // 发送数据
    socket.send(outPacket);
}


非常谢谢,我仔细查看了下只要用一个DatagramSocket来发的话就保证发和接是一个端口。我在看看,如何回复多个客户端,得把ip保存在set中,然后发的时候进行比较在发。应该理论对着。 --------------------编程问答-------------------- 建议尽量用同步处理机制,也就是在一次循环中接收并回复一个客户端,这样你不用解决并发问题。

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

否则要对该Socket的send和receive都做同步保护,有点太复杂了。


这样会存在问题,收到后是可以直接回复,可是想再次获取数据的时候就得向客户端发送请求命令了。 --------------------编程问答-------------------- 程序试着写好了,做成swing收发都没问题,想用web通过dwr来调用还是存在一点问题,继续研究下。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,