2016-04-13 10 views
-1

エコークライアントサーバを作成しようとしていますが、サーバからの応答がありません。私の間違いがどこにあるのか分かりません。 私はインターネット上のいくつかの例を見てきました。あるものはInputStream/OutputStreamを使うだけですが、私はBufferedReaderとPrintWriterを使うことに決めました - これは大きな違いがありますか?エコーサーバがエコーしない

サーバー側:

public class Server { 

public static void main(String[] args){ 
    Server server = new Server(); 
    server.runServer(Integer.parseInt(args[0])); 
} 

private void runServer(final int port){ 
    ServerSocket serversckt = null; 
    Socket socket = null; 
    BufferedReader in = null; 
    PrintWriter out = null; 

    try{ 
     serversckt = new ServerSocket(port); 
     socket = serversckt.accept(); 
     System.out.println("Request from client accepted!"); 


     in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
     out = new PrintWriter(socket.getOutputStream(), true); 

     String str; 
     while((str = in.readLine()) != null){ 
      System.out.println(str); 
      out.println(str); 
      out.flush(); 
     } 
    } 
    catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 

} 
} 

クライアント側:

public class Client{ 

public static void main(String[] args){ 
    Client client = new Client(); 
    client.runClient(Integer.parseInt(args[0]), args[1]); 
} 

private void runClient(final int port, final String hostname){ 
    Socket sckt = null; 
    try{ 
     sckt = new Socket(hostname, port); 
     BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 
     BufferedReader in = new BufferedReader(new InputStreamReader(sckt.getInputStream())); 
     PrintWriter out = new PrintWriter(sckt.getOutputStream(), true); 

     String str; 
     while((str = stdIn.readLine()) != null){ 
      out.println(str); 
      System.out.println(in.readLine()); 
     } 

    } catch(IOException e){ 
     System.out.println(e.getMessage()); 
    } 
} 

ありがとう!

+0

サーバ内のwhile((str = in.readLine())!= null) 'はブロッキング呼び出しであるとは考えていないので、最初の読み込みで' null'になり、終了しますサーバー。たぶん、誰かが 'BufferedReader'についての知識があり、ブロックされているかもしれません。 – Tom

+1

実際に、* echo *サーバをエコーし​​ないechoサーバを呼び出すことはできますか? – SergeyA

+0

@thatotherguyこれが最も重要なポイントです。コンソールから読み込み、サーバーに送信し、その "エコー"を読みます。 @OP 'System.out.println(in.readLine());'もブロックしないので、サーバがオフライン(最初のコメントを読んでいる)であるか、回答。 – Tom

答えて

1

問題を再現できません。私は不足しているインポートと最終的に}をClient.javaに追加し、コンパイルし、サーバとクライアントを別々の端末で実行しました。

クライアント:

$ Javaクライアント2000はlocalhost
fooの
fooの
バー
バー

サーバー:

$のJava Server 2000の
お客様からのご要望が受け入れられました!
FOO
バー

私はクライアントウィンドウで何かを書いたびに、それは私にエコーバックされ、同じ行には、サーバ上に示しました。

+0

私は間違いを見つけました(それは日食でした)!コードは本当に正しいです! – emilieee

関連する問題