2016-07-02 10 views
1

私はUDPサーバークライアントプログラムを作成しました。私が直面している問題は、私がサーバプログラムを実行しているときに、クライアントが接続するのを待っていないということです。最後まで実行した後、全体コードが実行されています。そして、私は、サーバー側の実行の間にクライアント側を実行しているとき、クライアント側は実行ポイントからデータを受信して​​います。ここでUdpサーバークライアントJava

public static void main(String args[]) throws Exception 
    { 
    DatagramSocket serverSocket = new DatagramSocket(4321); 
     byte[] sendData; 
     String sentence = null; 
     FileInputStream file = new FileInputStream(new File("E:\\Deepak.txt")); 
     InetAddress IPAddress=InetAddress.getByName("localhost"); 
     BufferedReader in = new BufferedReader(new InputStreamReader(file)); 
    do{ 
       while((sentence = in.readLine()) != null) 
       { 
       Thread.sleep(3000); 
       System.out.println(sentence); 
       sendData = sentence.getBytes(); 
       DatagramPacket sendPacket =new DatagramPacket(sendData, sendData.length,IPAddress,9876); 
       serverSocket.send(sendPacket); 
      } 
      }while(true); 
    } 

コード - 私のサーバーは、ここではUDP

public static void main(String args[]) throws SocketException, UnknownHostException, IOException 
{ 
    DatagramSocket clientSocket = new DatagramSocket(); 
    byte[] receiveData = new byte[1024]; 
    String sentence ; 
    while(true) 
      {     
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); 
      receivePacket.getLength(); 
      System.out.println(receivePacket.getLength()); 
      clientSocket.receive(receivePacket); 
      sentence = new String(receivePacket.getData());     
      } 
    } 

答えて

1

コード - 私のクライアント側はコネクションレスですので、中に接続のようなものはありません。 パケットを送信することができます(火災で、Datagramに指定されたポートにデータを送信します)。または、受信したパケットがあるまで、javaでのreceiveのブロックを受信します(の場合、sendはjavaでデータを送信します) )。

クライアントが「接続」している場合にのみデータを送信するサーバーを使用する場合は、UDPの上に独自の接続を実装する必要があります。

ので合計:

  • sendは何のために待機しません、それだけでワイヤー
  • receiveにデータグラムをスローしますと、

が持つ到着するデータグラムを待ちます上記の情報は、接続を維持するために独自のプロトコルを作成する必要があります。

+0

クライアントが「接続」している場合にのみデータを送信するサーバーを使用する場合、UDPの上に自分の接続を実装する方法を教えてください。私はソケットプログラミングの新しいです。 –

+0

'receive'を行うためにサーバを変更することはできませんか?それは最も簡単な方法です。 –

+0

いいえ、私の特定のアプリケーションは、受信者として送信者とクライアントとしてサーバーを実装する必要があります。 –

関連する問題