2016-07-02 26 views
1

Ich habe UDP-Server-Client-Programm geschrieben. Das Problem, das ich gegenüberstelle, ist, dass, wenn ich Serverprogramm ausführe, es nicht darauf wartet, dass sich der Client verbindet. Der gesamte Code wird nach dem Ausführen bis zum Ende ausgeführt. Und wenn ich die Client-Seite zwischen der Ausführung der Server-Seite ausführen, empfängt die Client-Seite Daten von ihrem Ausführungspunkt. Hier ist mein Server Code-Udp Server Client 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); 
    } 

hier meine Client-Seite ist Code-

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());     
      } 
    } 

Antwort

1

UDP verbindungslos ist, so gibt es nicht so etwas wie eine Verbindung in ihm. Sie können nur ein Paket senden (in einem Feuer und vergessen Weg, send in Java sendet die Daten an den Port in der Datagram angegeben) oder empfangen Paket auf dem Port (receive in Java wird blockiert, bis ein Paket empfangen wird).

Sie müssten also Ihre eigene Verbindung zu UDP implementieren, wenn Sie einen Server haben möchten, der nur Daten sendet, wenn der Client mit ihm "verbindet".

So zusammenfassend:

  • send für alles, was nicht wartet, wird es nur wirft das Datagramm auf dem Draht
  • receive für einen Datagramm warten

Mit dem ankommen über den Informationen müssten Sie Ihr eigenes Protokoll schreiben, um die Verbindung zu behalten.

+0

Können Sie mir bitte sagen, wie ich meine eigene Verbindung über UDP implementieren kann, wenn ich einen Server haben möchte, der nur Daten sendet, wenn der Client mit ihm "verbindet". Ich bin neu in der Socket-Programmierung. –

+0

Wäre es nicht möglich, den Server zu ändern, um das 'receive' zu ​​tun? Es ist der einfachste Weg. –

+0

Nein. Meine spezifische Anwendung muss Server als Sender und Client als Empfänger implementiert werden. –