我目前正在使用ReliableUDP协议(protocol)的Java实现,发现here.该项目完全没有教程,所以我发现很难发现问题。我已经设置了客户端和服务器。服务器在localhost:1234上运行,客户端在localhost:1235上运行。服务器首先建立,并循环监听连接-try{ReliableSocketclientSocket=server.socket.accept();InetSocketAddressclientAddress=(InetSocketAddress)clientSocket.getRemoteSocketAddress();Logger.getLog
我有3个节点A、B和C,它们具有各自的端口号。我正在尝试编写一个接受3个参数的java程序:它的节点名称和它的2个相邻节点的端口并向它们广播一个字符串"HelloI'mA"(所以A会广播给B和C)。它将每3秒执行一次。该程序将在3个不同的实例中运行。收到字符串后,它将打印从“Receivedstring”接收到的节点(端口B的示例)。我很难实现这个,不过我听说过使用UDP的叫做multicasting的东西。这是我到目前为止的工作,我做错了什么?classUDP{publicstaticvoidmain(String[]args)throwsException{StringnodeNa
我正在尝试发送一个DatagramPacket,然后必须等待来自服务器的确认,以便我知道我是否必须重新发送相同的数据包或发送下一个数据包......我在客户端使用相同的套接字,发送数据包并接收确认(ack),在服务器端,另一个套接字用于接收数据包,然后发送致谢客户..第一个问题是客户端正在发送数据包,服务器正在接收它,然后向客户端发送确认,但客户端在收到确认包时阻塞。我正在制作一些System.out.println来确定问题出在哪里,但我找不到解决这个问题的方法。第二个问题是服务器仍然总是在接收数据,并且不要等待客户端发送一些东西,我检查了因为我得到了那些行(比如“得到了长度为xxx
我觉得我在这里遗漏了一些非常明显的东西。我的系统的整体结构使我想使用不带选择器的阻塞DatagramChannel,以保持简单。我试图通过在套接字上设置超时来实现超时处理,但这似乎没有效果。这段伪代码暗示了我正在努力实现的目标。DatagramChannelchannel=DatagramChannel.open();channel.socket().bind(someaddress);channel.socket().setSoTimeout(3000);channel.send(outBuffer,peerAddress);channel.receive(inBuffer);另一方
通过wireshark这个抓包工具抓取udp协议的报文进行详细的分析。dns默认是基于udp协议的。访问一个域名的过程中,其实就是会做一个域名解析。域名解析用到的就是dns协议(应用层协议)。下面就触发dns的流量,抓取报文看下udp协议的实现:ping一个域名,解析成ip地址,这个过程就会调用dns协议。下面就是抓包抓到的dns协议:首先发了个这样的域名请求,然后网关承担域名解析的作用,回应一个这个域名对应的ip地址是什么。1.双击打开第一个报文:dns协议的默认端口是53端口,源端口是随机的。这个里面没有序号、确认号和标志位都没有。这就是udp协议。基于udp协议之上的是dns协议:2.下
请推荐实现可靠udp的java库。它将用于游戏服务器与客户端和其他服务器进行通信。附言:也许您可以建议可以更高效地处理此类任务(游戏服务器)的技术?但这必须在Linux上工作。编辑:这是一款Action类游戏,因此需要尽快与服务器通信。编辑2:我找到了Enet这是用于FPS游戏的,但它是C++,如果我一秒钟调用它多次,会不会有开销? 最佳答案 这些是我所知道的实现可靠UDP之类的库/框架:MobileReliableUDP(MR-UDP)MR-UDPaimsatprovidingreliablecommunicationbasedo
最近,我正在使用Jnetpcap通过网络发送/接收原始数据包。Jnetpcap提供通过Pcap.sendPacket()发送数据包。此方法获取要发送的原始缓冲区或字节。另一方面,org.jnetpcap.protocol.*类包装了协议(protocol)头,我们可以使用它们来解码捕获的数据包。当我使用下面的代码制作一个Ip4数据包时,它会导致NullPointerException:importorg.jnetpcap.protocol.network.Ip4;publicclassTest{publicstaticvoidmain(String[]args){Ip4ip4=newI
我正在尝试编写一些通过UDP发送单个int的代码。我到目前为止的代码:发件人:intnum=2;DatagramSocketsocket=newDatagramSocket();ByteArrayOutputStreambout=newByteArrayOutputStream();PrintStreampout=newPrintStream(bout);pout.print(num);byte[]barray=bout.toByteArray();DatagramPacketpacket=newDatagramPacket(barray,barray.length);InetAddr
Closed.Thisquestionneedstobemorefocused。它当前不接受答案。想改善这个问题吗?更新问题,使它仅关注editingthispost的一个问题。在5个月前关闭。Improvethisquestion我正在尝试与LAN上的每个人联系,以发现哪些设备当前正在使用ip并正在运行我的服务。每个运行该服务的设备都将在联机时知道连接了哪些其他设备。我有基本的网络经验(tcp/udp),但是对于更复杂的通信程序包我还没有做很多事情。我想发表到目前为止的研究/尝试,并得到一些专家的答复,以限制我对future潜在解决方案的反复试验的时间。要求:当前使用Java,但需要
我有一个简单的客户端/服务器设置。服务器在C中,查询服务器的客户端是Java。我的问题是,当我通过连接发送带宽密集型数据(例如视频帧)时,它会丢弃多达一半的数据包。我确保我在服务器端正确地分段了udp数据包(udp的最大有效负载长度为2^16)。我验证了服务器正在发送数据包(printfsendto()的结果)。但是java似乎没有得到一半的数据。此外,当我切换到TCP时,所有视频帧都通过了,但延迟开始增加,在几秒钟的运行时间后增加了几秒钟的延迟。有什么明显的我遗漏的吗?我就是想不通。 最佳答案 获取像Wireshark这样的网络工