2017-09-11 7 views
0

私はクライアントからクライアントへの通信を設定しようとしていますが、何か問題があります。Java - GUIによるクライアントとクライアントの通信。返信メッセージの問題

現在、私はサーバーと他のクライアントとして1つの動作をしていますが、サーバーにGUIの簡単なテキストメッセージの形式でクライアントへの接続の確認を返すように苦労しています。

現在のところ、私のコードでは、クライアントが簡単なhelloメッセージをサーバに送信して動作します。コメントアウトされたコードは、クライアントに接続確認メッセージを返す最近の試みですが、機能しません。ここで

は、サーバーコードである:ここで

JMenuItem SeederItem = new JMenuItem("Seeder mode"); 
SeederItem.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent arg0) 
    { 
     // Seeder mode 

     try 
     { 
      // Waiting to be connected to 
      System.out.println("Seeder waiting for leecher.."); 
      DatagramSocket SeederSocket = new DatagramSocket(2345); 
      byte[] SeederBuffer = new byte[512]; 
      DatagramPacket DGP = new DatagramPacket(SeederBuffer,SeederBuffer.length); 

      // Receiving connection attempt 
      String message = ""; 
      SeederSocket.receive(DGP); 
      message = new String(SeederBuffer); 

      System.out.println(message); 

      /* 
      // Response to connection attempt 
      String returnGreeting = "You have successfully connected to the seeder!"; 
      SeederBuffer = returnGreeting.getBytes(); 
      DatagramPacket DGPResponse = new DatagramPacket(SeederBuffer,SeederBuffer.length); 
      SeederSocket.send(DGPResponse); 
      */ 
     } 
     catch (SocketException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (UnknownHostException e) 
     { 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
    } 
}); 

は、クライアントのコードです:

JButton btnConnect = new JButton("Connect to seeder"); 
btnConnect.addActionListener(new ActionListener() 
{ 
    @Override 
    public void actionPerformed(ActionEvent e) 
    { 
     try 
     { 
      // Attempting to connect 
      InetAddress MyAddress = InetAddress.getByName(txtHostAddress.getText()); 
      DatagramSocket LeecherSocket = new DatagramSocket(); 

      String Greeting = "Hello from the leecher"; 
      byte[] LeecherBuffer = Greeting.getBytes(); 

      DatagramPacket dp = new DatagramPacket(LeecherBuffer,LeecherBuffer.length,MyAddress,Integer.parseInt(txtPort.getText())); 
      LeecherSocket.send(dp); 

      System.out.println("Activation test"); 

      //???? 

      /* 
      // Receiving successful connection response 
      DatagramPacket DGPReceiveResponse = new DatagramPacket(LeecherBuffer,LeecherBuffer.length); 

      String message = ""; 
      LeecherSocket.receive(DGPReceiveResponse); 
      message = new String(LeecherBuffer); 

      System.out.println(message); 
      */ 
     } 
     catch (UnknownHostException e1) 
     { 
      e1.printStackTrace(); 
     } 
     catch (SocketException e1) 
     { 
      e1.printStackTrace(); 
     } 
     catch (IOException e1) 
     { 
      e1.printStackTrace(); 
     } 
    } 
}); 

コメントアウトコードがコメント解除されている場合は、それもクライアントからクライアントのメッセージを送信するコードを破りますサーバーに転送します。また、この問題に言及し

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: null address || null buffer –

:あなたは、パケットがしようとしている場合にIPアドレスを提供する必要が

ClientFrame1$1.actionPerformed(ClientFrame1.java:83) , which refers to this line: SeederSocket.send(DGPResponse);

+0

質問は何ですか? –

+0

問題は既に解決されていますが、ありがとうございます。 – Impact

答えて

1

それは、このエラーを返します。あなたが最初のパケットを送ったときと同じように。 http://download.java.net/jdk7/archive/b123/docs/api/java/net/DatagramPacket.html#getAddress()

この関数は、SeederSocket.recieve(DCP)を実行したときに作成されたDGPインスタンスから使用します。だから、

String returnGreeting = "You have successfully connected to the seeder!"; 
       SeederBuffer = returnGreeting.getBytes(); 
       DatagramPacket DGPResponse = new DatagramPacket(SeederBuffer,SeederBuffer.length, DGP.getAddress(), DGP.getPort()); 
       SeederSocket.send(DGPResponse); 
+0

ご協力いただきありがとうございます。それは私の問題をTに解決しました;) – Impact

関連する問題