2017-02-27 8 views
1

私はクライアントのメッセージにエコーを返そうとしていますが、方法を理解していません。私のクライアントは、メッセージを送信し、その後私は論文を逆にして進行していないプログラムは、(ラインで=新しいDataOutputStreamを(clientSocket.getOutputStream())クライアントとサーバ間のメッセージ交換 - Javaのソケット

DataOutputStreamのを立ち往生、サーバーの

を)。私はそれが入力ストリームを閉じることだと思いますが、私がそれを行うとソケットが閉じてしまい、再利用する方法がありません。私はreadUTFとsocket.shutDownInputを使ってこれを行うことを管理していますが、私は一番簡単な方法を望んでいます。

クライアント

public class SocketClient { 

public static void main(String[] args) throws IOException { 
    // Check arguments 
    if (args.length < 3) { 
     System.err.println("Argument(s) missing!"); 
     System.err.printf("Usage: java %s host port file%n", SocketClient.class.getName()); 
     return; 
    } 

    String host = args[0]; 
    // Convert port from String to int 
    int port = Integer.parseInt(args[1]); 
    // Concatenate arguments using a string builder 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 2; i < args.length; i++) { 
     sb.append(args[i]); 
     if (i < args.length-1) { 
      sb.append(" "); 
     } 
    } 
    String text = sb.toString(); 

    // Create client socket 
    Socket socket = new Socket(host, port); 
    System.out.printf("Connected to server %s on port %d %n", host, port); 

    // Create stream to send data to server 
    DataOutputStream out = new DataOutputStream(socket.getOutputStream()); 

    // Send text to server as bytes 
    out.writeBytes(text); 
    out.writeBytes("\n"); // devia meter readline a null... 

    System.out.println("Sent text: " + text); 

    System.out.println(socket.getInetAddress().getHostAddress() + " " + socket.getPort()); 

    //out.close(); 
    //socket.shutdownOutput(); trials... 
    //////////////////////////////////////////// 

    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

    System.out.println("here"); 
    // Receive data until client closes the connection 
    String response; 
    while ((response = in.readLine()) != null) 
     System.out.printf("Received message with content: '%s'%n", response); // here is where client doesn't proceed - he doesn't get the echo 

サーバー

public class SocketServer { 

public static void main(String[] args) throws IOException { 
// Check arguments 
if (args.length < 1) { 
System.err.println("Argument(s) missing!"); 
System.err.printf("Usage: java %s port%n", SocketServer.class.getName()); 
     return; 
    } 

    // Convert port from String to int 
    int port = Integer.parseInt(args[0]); 

    // Create server socket 
    ServerSocket serverSocket = new ServerSocket(port); 
    System.out.printf("Server accepting connections on port %d %n", port); 

    // wait for and then accept client connection 
    // a socket is created to handle the created connection 
    Socket clientSocket = serverSocket.accept(); 
    System.out.printf("Connected to client %s on port %d %n", 
     clientSocket.getInetAddress().getHostAddress(), clientSocket.getPort()); 

    // Create stream to receive data from client 
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 

    // Receive data until client closes the connection 
    String response; 
    while ((response = in.readLine()) != null) 
     System.out.printf("Received message with content: '%s'%n", response); 

    ///////////////////////////////////////////// 


    DataOutputStream out = new DataOutputStream(clientSocket.getOutputStream()); // he doesn't reach here 

    System.out.println("here-serv"); 

    System.out.println(clientSocket.getInetAddress().getHostAddress() + " " + clientSocket.getPort()); 
    // Send text to server as bytes 
    out.writeBytes("echo"); 

私は実際にサーバからのreadlineで何かを持っているこの問題は、それがnullを取得していないと考えている - しかし、クライアントが "\ n" を送信します!あなたは私のコードミスを見つけることができますか?おかげ

+0

は私が多くを知っているscroll down toパソコンへ転送...あなたはリアルタイムのチャットサーバーを構築したい場合に備えてfirebaseクラウドメッセージングのために行くのはなぜですか? –

+0

私はそれを構築したくない、これは単なる実験です。単純に両面を送受信しているだけです... – samthegolden

+0

ソケットは閉じられ、出力ストリームは 'flush()'を使用する必要があります –

答えて

-1

私がたっストリームは、その停止条件は行き過ぎだった...クローズされるまでのreadlineがnullを受けることはないだろうと考え出しOK - のみ送信-と-近いconectionsため

関連する問題