2012-09-22 55 views
1

我已经创建了使用UDP传输数据的客户端和服务器软件(由于TCP带宽限制,我们需要使用UDP)。当我通过本地主机运行它时,它像我想要的那样运行,所以我将服务器应用程序移动到实际的服务器上,那就是出现问题的时候。使用DatagramSocket时无法访问端口

调试一小时后和跟踪,这是发生了什么:

  • 客户端发送一个DatagramPacket类在一个DatagramSocket的。
  • 服务器(计算机)收到它。
  • 应用程序永远不会收到它,永远不会发回正确的数据包。
  • 我的操作系统发送ICMP消息发送回:目的地不可达(端口不可达)

客户端在端口25055和25056-25060的服务器上运行。在我所做的Wireshark跟踪中,我可以看到数据包是从正确的端口发送的。我已经禁用了防火墙,并赋予了软件顶级用户权限。

重要的部分代码:

socket = new DatagramSocket(clientPort); 
socket = new DatagramSocket(serverPort); 

private void sendPacket() throws Exception 
{ 
packet = new DatagramPacket(data, data.length, address, serverPort); 
socket.send(packet); 
} 

private void receivePacket(int packetSize) throws Exception 
{ 
if(data == null || data.length != packetSize) 
    data = new byte[packetSize]; 
packet = new DatagramPacket(data, packetSize); 
socket.receive(packet); 
} 

有没有人有为什么会这样的想法?任何想法都会大大降低。

+0

可否请您澄清一下,您如何在您的案例中设置“服务器”套接字 – Serge

回答

2

'端口无法访问'表示在该端口没有收到任何内容。你在某个地方弄错了端口。

顺便说一句预定要完成的第一行是什么?因为它不。