2011-12-16 27 views
4

Javaでソケット接続をテストしようとしましたが失敗しました。私は何も考えてませんしましたJavaソケット接続

Server socket created 
Socket accepted 
Output created 
Input: null 

public class TestServer { 

public static void main(String args[]) throws IOException { 
    ServerSocket serverSocket = new ServerSocket(1111); 
    System.out.println("Server socket created"); 
    Socket socket = serverSocket.accept(); 
    System.out.println("Socket accepted"); 
    PrintWriter output = new PrintWriter(socket.getOutputStream(), true); 
    System.out.println("Output created"); 
    output.write("Output string"); 
    socket.close(); 
    serverSocket.close();  
} 
} 

public class TestClient { 

public static void main(String args[]) throws IOException { 

    Socket socket = new Socket("127.0.0.1", 1111); 
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    System.out.println("Input: " + input.readLine()); 
    socket.close(); 

} 

} 

出力がある(それの後に、サーバーを実行した後や、クライアント):ここに私のコードは(2つの単純なアプリケーション、サーバーおよびクライアント)でありますクライアントが文字列を受信しなかった理由私はどんな助けにも感謝しています。

答えて

6

通常、PrintWriterやOutputStreamのようなクラスを使用するときは、その内容をフラッシュしてソケットを通してデータを送信するか、ファイルに書き込む必要があります。

+0

それはまさに私の問題だった。ありがとう。 –

+0

あなたは大歓迎です! ;) – Felipe

2

input.readLine入力文字列に改行が必要です。 output.writeoutput.printlnに置き換えてください。

これでテストしましたが、このように正しく動作するはずです。

+1

あなたは 'println'を意味しますか? ;) –

+0

@Peter Lawrey:ええ、すみません、私は急いでいました。今すぐ働かなければならない。 – Tudor

1
//Put the line 

output.flush(); 

//in the end of the TestServer.java 

//and in the TestClient.java I have used the code as given below 

Socket socket = new Socket("127.0.0.1", 1111); 
    BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
    String str; 
    while((str=input.readLine())!=null){ 
     System.out.println("Input: " + str); 
    } 
    socket.close(); 

} 
2

他のすべてのコメントに加えて、あなたは、ソケット自体は、あなたがソケットの出力ストリームを中心に作成した最も外側の出力ストリームを閉じる必要があります閉じてはいけません。その意志:

(A)は (B)は (C)入力ストリームを閉じ、そして (d)のソケットを閉じる閉じる出力ストリームをフラッシュします。