2017-06-10 11 views
0

私はJavaネットワーキングの初心者です。私はクライアント/サーバーudpプログラムを作成しました。サーバー側は正常に動作していますが、クライアント側はサーバーから何も受信していません。間違いを修正してください。サーバー側は完全に稼働していますが、クライアント側は終了するまで動作していません。どんな助けも素晴らしいだろう。Java UDPクライアントがサーバーから受信していない(単純なクライアントサーバーのudpコード)

public class Client { 
    public static void main (String args[]) throws Exception { 
     DatagramSocket s = new DatagramSocket(); 
     String msg = "Hello! ,from client. "; 
     byte[] b = msg.getBytes(); 
     InetAddress ia = InetAddress.getLocalHost(); 
     DatagramPacket dp = new DatagramPacket(b, b.length, ia, 9999); 
     s.send(dp); 

     byte[] b2 = new byte[1024]; //byte array 
     DatagramPacket dip = new DatagramPacket(b2, b2.length); 
     s.receive(dip); 
     String str = new String(dip.getData()); 
     System.out.println("From server" + str); 
    } 
} 

public class Server { 
    void run() throws Exception { 
     DatagramSocket ds = new DatagramSocket(9999); 
     byte [] b = new byte[1024]; 

     DatagramPacket dp = new DatagramPacket(b, b.length); 
     ds.receive(dp); 
     String msg = new String(dp.getData()); 
     System.out.println("Message from client:" + msg); 

     //giving back to client 
     String str = "HI!, from server."; 
     byte[] b2 = str.getBytes(); 
     InetAddress ia = InetAddress.getLocalHost(); 
     DatagramPacket dop = new DatagramPacket(b2, b2.length, ia, 9999); 
     ds.send(dop); 
     System.out.println("Message sent back"); 
     ds.close(); 
    } 

    public static void main(String args[]) throws Exception { 
     Server server = new Server(); 
     server.run(); 
    } 
} 

答えて

0

エラーは、サーバーで、クライアントは、同じホスト上で実行するので、彼らは以下のように異なるポートで待機する必要があります。

サーバー

import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 

public class Server { 
    void run() throws Exception { 
     DatagramSocket ds = new DatagramSocket(9999); 
     byte [] b = new byte[1024]; 

     DatagramPacket dp = new DatagramPacket(b, b.length); 
     ds.receive(dp); 
     String msg = new String(dp.getData(),0,dp.getLength(),"UTF-8"); 
     System.out.println("Message from client:" + msg); 

     //giving back to client 
     String str = "HI!, from server."; 
     byte[] b2 = str.getBytes(); 
     InetAddress ia = InetAddress.getLocalHost(); 

     DatagramPacket dop = new DatagramPacket(b2, b2.length, ia, 9998); 
     ds.send(dop); 
     System.out.println("Message sent back"); 
     ds.close(); 
    } 

    public static void main(String args[]) throws Exception { 
     Server server = new Server(); 
     server.run(); 
    } 
} 

とクライアント

import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 

public class Client { 
    public static void main (String args[]) throws Exception { 
     DatagramSocket s = new DatagramSocket(9998); 
     String msg = "Hello! ,from client. "; 
     byte[] b = msg.getBytes(); 
     InetAddress ia = InetAddress.getLocalHost(); 
     DatagramPacket dp = new DatagramPacket(b, b.length, ia, 9999); 
     s.send(dp); 

     byte[] b2 = new byte[1024]; //byte array 
     DatagramPacket dip = new DatagramPacket(b2, b2.length); 
     s.receive(dip); 
     String str = new String(dip.getData(),0,dip.getLength(),"UTF-8"); 
     System.out.println("From server" + str); 
    } 
} 
+0

ありがとう –

1

サーバーは、それは、送信者のアドレスを読み込むようにするには、サーバーを更新する必要がポート9999上で、localhostにすべての応答を送信している:

InetAddress ia = dp.getAddress(); 
int port = dp.getPort(); 
DatagramPacket dop = new DatagramPacket(b2, b2.length, ia, port); 
関連する問題