2017-05-23 2 views
0

den nächsten Fall Stellen Sie sich vor:Gewusst wie: Java Server-Socket Antwort und Client-Lese

-Client - Server-Verbindung

-Client eine Anfrage an den Server-Server sendet antwortet der Client- -Client liest die Antwort

Klasse Kunde:

public class Client extends Service{ 

    private String IP_ADDRESS; 
    private int PORT; 

    public void start(){ 
     l.info("Starting client for server at: "+IP_ADDRESS+":"+PORT); 
     //Initialization of the client 
     try { 
      cs=new Socket(IP_ADDRESS,PORT); 
     } catch (UnknownHostException e) { 
      l.error("Unkown host at the specified address"); 
      e.printStackTrace(); 
     } catch (IOException e) { 


     l.error("I/O error starting the client socket"); 
       e.printStackTrace(); 
      } 
     } 

     //Sends the specified text by param 
     public void sendText(String text){ 
      //Initializa the output client with the client socket data 
      try { 
       //DataOutputStream to send data to the server 
       toServer=new DataOutputStream(cs.getOutputStream()); 

       l.info("Sending message to the server"); 

       PrintWriter writer= new PrintWriter(toServer); 
       writer.println(text); 
       writer.flush(); 

      } catch (IOException e) { 
       l.error("Bat initialization of the output client stream"); 
       e.printStackTrace(); 
      } 
     //Should show the answers from the server, i run this as a thread 
     public void showServerOutput(){ 
      String message; 

      while(true){ 
       //If there are new messages 
       try { 
        BufferedReader br= new BufferedReader(new InputStreamReader((cs.getInputStream()))); 
        if((message=br.readLine())!=null){ 
         //Show them 
          System.out.println(message); 
        } 
       } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
      } 
     } 

    } 

showServerOutput() ist die Methode, die jeder zurückgibt

Dann meine Serverklasse haben den folgenden Code

public class Server extends Service{ 
    public void startListenner(){ 
     l.info("Listening at port "+PORT); 
     while(true){ 
      // Waits for a client connection 
      try { 
       cs=ss.accept(); 
       l.info("Connection received: "+cs.getInetAddress()+":"+cs.getPort()); 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      try { 
       toClient= new DataOutputStream(cs.getOutputStream()); 
       PrintWriter cWriter= new PrintWriter(toClient); 

       //Send a confirmation message 
       cWriter.println("Message received"); 
       //Catch the information sent by the client 
       csInput=new BufferedReader(new InputStreamReader(cs.getInputStream())); 

       printData(); 
       toClient.close(); 

      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

     } 
    } 
} 

Wie Sie im Senden einer Nachricht an den Client mit den Worten sehen Antwort von dem Server

gesendet: „Nachricht empfangen“, aber es ist nie in dem Client angezeigt Konsole. Was ist los mit dir?

EDIT

Die printData() Methode druckt die Nachricht von dem Client in der Konsole

erhielt
public void printData(){ 
    l.info("Printing message received"); 
    try { 
     System.out.println(csInput.readLine()); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+0

Dieser Thread fragte oft auf SO, haben Sie versucht, verwandte Themen zu überprüfen? – Omore

+0

Ja, ich habe ein bisschen recherchiert, bevor ich das geschrieben habe, aber das hat mir nicht geholfen. Ich habe wirklich darüber nachgedacht, die Tatsache, einen Thread zu erstellen, der so gefragt wurde, aber wie ich sagte, fand ich nicht die falsche Sache in meinem Code. Es tut mir leid wegen dieses unnötigen Threads. – JD0001

Antwort

1

nicht sicher, was Ihre printData() Methode tut, aber Sie sind kein cWriter.flush() auf dem Server nicht gefunden Seite, sobald Sie "Nachricht erhalten" gedruckt haben? Wie ich es verstehe, schreiben Sie Ihre Nachricht, aber senden Sie sie nie an Ihren Client.

+0

Sie haben recht, ich habe nichts gesendet, da ich vergessen habe, die 'flush' hinzuzufügen – JD0001

+0

Großartig, froh, dass es geholfen hat! – Kaiserbogey

Verwandte Themen