2017-12-14 23 views
1

私はこのSpringBootアプリケーションを作成し、Javaとのネットワーク通信をユーザーデータグラムプロトコルで調べました。私は、Web開発者、バージョンのためのEclipseのJava EE IDEでアプリケーションを実行しています:Oxygen.1aリリース(4.7.1a)ここでJava UDPサーバーが動作しません

メインクラス:ここ

@Override 
    public void run(String... args) throws Exception { 

     socket = new DatagramSocket(UDP_PORT); 

     byte[] receiveData = new byte[BUFFER_SIZE]; 
     byte[] sendData = new byte[BUFFER_SIZE]; 

     LOG.info("UDP server init..."); 

     while (true) { 

      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);    
      socket.receive(receivePacket); 

      String sentence = new String(receivePacket.getData(), 0, receivePacket.getLength()); 

      LOG.info("recived [" + sentence + "] from " + receivePacket.getAddress()); 

      InetAddress IPAddress = receivePacket.getAddress(); 
      int port = receivePacket.getPort(); 

      DatagramPacket sendPacket = new DatagramPacket(receiveData, receiveData.length, IPAddress, receivePacket.getPort()); 
      socket.send (sendPacket); 

     }  
    } 

私がきたクライアントのUDPクラス私のコンピュータで

public class UDPClient { 

private final static int TCP_PORT = 5202; 

    private DatagramSocket socket; 
    private InetAddress address; 

    private byte[] buf; 

    public UDPClient() throws SocketException, UnknownHostException { 
     socket = new DatagramSocket(); 
     address = InetAddress.getByName("localhost"); 
    } 

    public String sendEcho(String msg) throws IOException { 

     buf = msg.getBytes(); 
     DatagramPacket packet = new DatagramPacket(buf, buf.length, address, TCP_PORT); 
     socket.send(packet); 
     packet = new DatagramPacket(buf, buf.length); 
     socket.receive(packet); 
     String received = new String(packet.getData(), 0, packet.getLength()); 

     return received; 
    } 

    public void close() { 
     socket.close(); 
    } 

    public static void main(String[] args) throws IOException, InterruptedException { 
      UDPClient udpClient = new UDPClient(); 

      for (;;) { 
       TimeUnit.SECONDS.sleep(3); 
       System.out.println 
        (udpClient.sendEcho("cullons")); 
      } 
    } 

} 

Serverが正常に動作している、そして私は、サーバー上のUDPServerを展開テストするために作成され、私は

IPv4アドレスIPCONFIG使用してIPを得ました。 。 。 。 。 。 。 。 。 。 。 :214.146.86.201

"localhost"を "214.146.86.201"に置き換えていますが、サーバーにメッセージは表示されません。

私は結果と私のコンピュータ

からnc -vzu 214.146.86.201 5202をやった:私はまたしてサーバーsocket = new DatagramSocket(UDP_PORT, InetAddress.getByName("214.146.86.201"));にしようとした

MacBook-Pro-de-lopes:$ nc -vzu 214.146.86.201 5202 
found 0 associations 
found 1 connections: 
    1: flags=82<CONNECTED,PREFERRED> 
    outif (null) 
    src 192.166.26.140 port 56827 
    dst 214.146.86.201 port 5202 
    rank info not available 

Connection to 214.146.86.201 port 5202 [udp/*] succeeded! 

しかし、サーバーのプリントヌル

LOG.info("socket InetAddres: " + socket.getInetAddress());上と LOG.info("socket RemoteSocketAddress: " + socket.getRemoteSocketAddress());同じ結果

答えて

1

最も可能性の高い問題は、サーバー上の5202ポートがクライアントからアクセスできない可能性があることです。ポートとそれらのアクセス可能性はTCPと同じではないかもしれませんが、とにかくいつでも間に誰かがあなたのデータパケットを落としている可能性があります。

最も簡単な回避策は、サーバー上でクライアントコードとサーバーコードの両方を実行することです(214.146.86.201)。接続可能であれば、明らかに通信の問題があります。そのような場合は、hereのようにNetcatを使って確認できます。私はそれを自分で試していない。

関連する問題