2017-10-13 12 views
-2

J'essaye de créer un programme de chat de client et de serveur en utilisant UDP. J'ai suivi un tutoriel faisant un programme similaire en utilisant TCP et j'ai essayé de traduire ensuite mes connaissances pour en faire un de la même manière en utilisant UDP.UDP Chat en Java

J'ai rempli un côté client et serveur à la fois montrant aucune erreur et se déroulera, mais une fois en cours d'exécution, ni l'autre volonté un message ou recevoir des messages ... quelqu'un peut me aider à voir ce que je fais mal?

côté serveur pour envoyer des messages:

try{ 
     //creates the packet to be sent 
     byte[] buf = new byte[256]; 
     String msgout = serverText.getText().trim(); 
     buf = msgout.getBytes(); 

     //uses the socet.receive method to get the packet to retrieve information to send 
     DatagramPacket packet = new DatagramPacket(buf, buf.length); 
     ss.receive(packet); 
     InetAddress address = packet.getAddress(); 
     int port = packet.getPort(); 

     //uses packet information to create and send packet 
     DatagramPacket packetSend = new DatagramPacket(buf, buf.length, address, port); 
     ss.send(packetSend); 

     //Displays the message in the chat area and clears the text area 
     serverArea.setText(serverArea.getText().trim()+"\n Server: "+msgout); 
     serverText.setText(""); 

    }catch (Exception e){ 

    } 

et le principal pour le réglage de la prise et la réception/impression:

String msgin = ""; 
    try{ 

     ss = new DatagramSocket(1420); // Sets socket at 1420 
     byte[] buf = new byte[256]; 
     DatagramPacket packet = new DatagramPacket(buf, buf.length); 
     ss.receive(packet); //Receives the packet from the socket 


     //Converts the byte array into a string 
     String clientMsg = new String(packet.getData(), 0, packet.getLength()); 

     while(!msgin.equals("exit")){ 
      //Displays the message 
      msgin = clientMsg; 
      serverArea.setText(serverArea.getText().trim()+"\n Client: "+msgin); //displays client message 

     } 

    }catch(Exception e){ 

    } 

Voici le code côté client, malade combiner son envoi et de réception zones en un seul bloc:

try{ 
     //Creates the message out using the known socket that the Server creates and the known local address 
     String msgout = clientText.getText().trim(); 
     sendBuf = msgout.getBytes(); 
     InetAddress address = InetAddress.getLocalHost(); 
     DatagramPacket sp = new DatagramPacket(sendBuf, sendBuf.length, address, 1420); 
     s.send(sp); 

     //Displays the text and clears the text field 
     clientchat.setText(clientchat.getText().trim()+"\n Server: "+msgout); 
     clientText.setText(""); 


    }catch (Exception e){ 

    } 
String msgin = ""; 

    try{ 
     //Creates a socket 
     DatagramSocket s = new DatagramSocket(); 

     //Receives the message from the server 
     byte[] buf = new byte[256]; 
     DatagramPacket rp = new DatagramPacket(buf, buf.length); 
     s.receive(rp); 

     //Converts byte array to message 
     String clientMsg = new String(rp.getData(), 0, rp.getLength()); 

     while(!msgin.equals("exit")){ 
      //Displays the message 
      msgin = clientMsg; 
      clientchat.setText(clientchat.getText().trim()+"\n Server: "+msgin); //displays client message 

     } 


    }catch (Exception e){ 

    } 

Toute aide et astuces seront grandement appréciés!

+1

Si vous avez des blocs de saisie vides, vous ne verrez évidemment pas d'erreurs. – Kayaman

Répondre

0

Si rien ne se passe, et vous ne pouvez pas envoyer/recevoir des messages, il est probable qu'il ya des exceptions qui sont générés. Cependant, puisque vous avez un bloc try-catch qui attrape toutes les exceptions, et qui ensuite ne fait rien, vous n'aurez aucune idée des exceptions levées, si elles sont lancées.

Plutôt que d'ignorer simplement des exceptions, vous devriez au moins imprimerez leur cause.

Dans vos déclarations de captures, ajoutez ce qui suit et vous serez en mesure de déboguer plus facilement.

e.printStackTrace(); 
+0

Malheureusement, cela n'a rien fait pour mon programme et il ne fait toujours rien. Je vais juste devoir le mettre au rebut je suppose et essayer de commencer à partir de nouveau. – MDSasquatch