2016-04-16 75 views
0

我在运行一台(mac)计算机上的服务器和客户端时遇到问题。我可以运行服务器,但是当我运行客户端它给我一个错误java.net.BindException: Address already in use at java.net.PlainDatagramSocketImpl.bind0(Native Method) 据我所知,有需要使用电话的财产以后SSH,但我不知道怎么用它做解决这个问题。 感谢在一台计算机上运行服务器和客户端(netbeans 8.1)

public class WRRCourseWork { 
public static void main(String[] args) { 
    try { 
     DatagramSocket IN_socket = new DatagramSocket(3000); 
     DatagramSocket OUT_socket = new DatagramSocket(5000); 
     IN_socket.setSoTimeout(0); 
     byte[] buffer = new byte[1024]; 
     DatagramPacket packet = new DatagramPacket(buffer, buffer.length); 
     while (true) { 
      //recive the message 

      IN_socket.receive(packet); 
      String message = new String(buffer); 
      System.out.println("Got message: " + message.trim()); 

      // send the message 
      String host = ""; 
      InetAddress addr = InetAddress.getByName(host); 
      DatagramPacket OUT_Packet = new DatagramPacket(message.getBytes(), message.getBytes().length, addr, 5000); 
      OUT_socket.send(OUT_Packet); 
      System.out.println("Sending Message: "+ message.trim()); 
     } 

    } catch (Exception error) { 
     error.printStackTrace(); 
    } 
} 

...

public class Messages { 
    public static void main(String [] args) { 
     System.out.println("hiiiiiii"); 
     //String host = "localhost"; 
     try { 
      while (true) { 
       InetAddress addr = InetAddress.getLocalHost(); 
       String message = "Hello World"; 
       DatagramPacket packet = new DatagramPacket(message.getBytes(), message.getBytes().length, addr, 4000); 
       DatagramSocket socket = new DatagramSocket(4000); 
       socket.send(packet); 
       //socket.close(); 
      } 
     } catch(Exception error) { 
      // catch all errors 
      error.printStackTrace(); 
     } 
    } 
} 
+0

该错误最有可能意味着您已分配给客户端应用程序的端口已被使用。但是,此错误与SSH无关。为了进一步帮助您,请发布您正在使用的代码段以及迄今已尝试的步骤。 – akskap

+0

我发布了代码 – MKM

回答

0

还有,你可能想改变这里的几件事情:

1)你是从客户端发送端口4000 UDP数据包但在服务器(接收器)代码中监听3000端口。端口应该相同。

2)有可能是在另一个Netbeans的选项卡或从终端可以是运行在服务器代码,它是已经被绑定到端口的另一实例。请确保您的服务器代码只有一个实例在运行。这将“地址已在使用中的错误”解决您的

3)我还添加了“的Thread.sleep(500)”在客户端(发送方)的代码在无限的,而你已经设置了循环。如果没有这个,代码最终会在我的机器上出现'Bad File Descriptor'错误。可能它与套接字句柄的冲突导致了无限循环的问题。

有了这些变化,客户端和服务器之间的数据交换工作正常。

相关问题