2017-06-11 9 views
1

非常に基本的なサーバーである以下のコードがあります。ブラウザでは、localhost:6789/xxxxのようなものを置いています。アプリが実行されているときは、クライアントから要求を読み込みますが、「このサイトにアクセスできない」というメッセージが表示され、アプリが例外をスローします。クライアントに応答する最善の方法は何ですか?javaサーバーアプリケーションから応答を受け取ることができません

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

} 

答えて

0

  • 要求は必ずしもHTTP 1.1ではないかもしれないので、あなたの応答が無効になることに注意してください。
  • 実際

    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

この有益な情報をありがとう。私はこれからも心に留めておきます。 – MXG123

1

あなたはOutputStreamを閉じる必要があり:

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

(すなわち、以下のようにループを追加することを検討)clientSentenceいくつかのおかげで存在します。それが問題を解決しました。私は次のoutToClient.writeBytes( "これは応答です")を使ってメッセージを返信したいと思います。 Webページは空白です。これは別の形式にする必要がありますか? – MXG123

+0

送信された応答が「Hello world」になるところの私の答えを見てください。応答ヘッダーの後に2つのキャリッジリターン( '\ n \ n')を送信する必要があります。 –

関連する問題