2017-06-11 2 views
1

Ich habe den folgenden Code unter dem ist ein sehr einfacher Server. Im Browser habe ich etwas wie: localhost: 6789/xxxx gesetzt. Wenn die Anwendung ausgeführt wird, liest sie die Anfrage vom Client, aber dann wird die Meldung "Diese Seite kann nicht erreicht werden" angezeigt und die App löst eine Ausnahme aus. Was ist der beste Weg, um auf den Kunden zu antworten?Kann keine Antwort von Java-Server-App bekommen

import java.net.*; 
import java.io.*; 
import java.net.Socket; 

public class URLConnection { 
    public static void main(String[] args)throws IOException { 
     String clientSentence; 
     ServerSocket welcomeSocket = new ServerSocket(6789); 

     while (true) { 
     Socket connectionSocket = welcomeSocket.accept(); 
     BufferedReader inFromClient = 
      new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
     DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
     clientSentence = inFromClient.readLine(); 
     System.out.println("Received: " + clientSentence); 
     outToClient.writeBytes("HTTP/1.1 200 OK"); 
     } 
    } 

} 

Antwort

0

Beachten Sie, dass

  • die Anforderung müssen nicht unbedingt HTTP 1.1 sein, und damit wäre Ihre Antwort ungültig.
  • es wird tatsächlich mehrere clientSentence (d berücksichtigen, wie nachstehend eine Schleife Zugabe)

    while (true) { 
        Socket connectionSocket = welcomeSocket.accept(); 
        BufferedReader inFromClient = 
          new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
        DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
    
        while(true) { 
         clientSentence = inFromClient.readLine(); 
         if (clientSentence != null && clientSentence.trim().isEmpty()) { 
          break; 
         } else { 
          System.out.println("Received: " + clientSentence); 
         } 
        } 
    
        outToClient.writeBytes("HTTP/1.1 200 OK\n\nHello world"); 
        outToClient.close(); 
    
+0

Danke für diese nützliche Information. Ich werde es mir merken, wenn ich vorwärts gehe. – MXG123

1

Sie haben die Outputstream schließen:

while (true) { 
     Socket connectionSocket = welcomeSocket.accept(); 
     BufferedReader inFromClient = 
       new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); 
     DataOutputStream outToClient = new DataOutputStream(connectionSocket.getOutputStream()); 
     clientSentence = inFromClient.readLine(); 
     System.out.println("Received: " + clientSentence); 
     outToClient.writeBytes("HTTP/1.1 200 OK"); 
     outToClient.close(); 
    } 
+0

Dank. Das hat das Problem gelöst. Nebenbei möchte ich mit einer Nachricht antworten, die folgenden outToClient.writeBytes verwendet ("Dies ist eine Antwort"); Die Webseite ist leer. Muss das dann in einem anderen Format sein? – MXG123

+0

Siehe meine Antwort unten, wo die Antwort gesendet wird "Hallo Welt". Sie müssen nach dem Antwortheader zwei Zeilenumbrüche ('\ n \ n') senden. –