2017-09-15 5 views
0

JUnitクラスでソケット経由でサーバーとクライアントのデータ交換をテストしようとしています。JUnitでソケット経由のサーバー - クライアントデータ交換テスト

private static Socket clientSocket; 
private static InputStream is; 
private static PrintWriter pw; 
private static Socket serverSocket; 
private static final int PORT_NUMBER = 1154; 

@BeforeClass 
public static void init() throws IOException { 
    ServerSocket sSocket = new ServerSocket(PORT_NUMBER); 
    clientSocket = new Socket("localhost", PORT_NUMBER); 
    is = clientSocket.getInputStream(); 

    serverSocket = sSocket.accept(); 
    OutputStream os = serverSocket.getOutputStream(); 
    pw = new PrintWriter(os, true); 
} 

@Test 
public void testXPackage() throws IOException { 
    for (int packageByte : X_PACKAGE) { 
     pw.write(packageByte); 
    } 

    while (is.available() > 0) { 
     System.out.println(is.read()); 
    } 
} 

しかしis.available()は常に0です:私はそれを続いてきました。私は何が欠けているのですか?

答えて

1

PrintWriter pmはバッファリングされた出力です。あなたは書き込みを終えたらpm.flush()に電話をしなければなりません。したがって、たとえば:

@Test 
public void testXPackage() throws IOException { 
    for (int packageByte : X_PACKAGE) { 
     pw.write(packageByte); 
    } 
    pm.flush(); // <<--- added this line. 

    while (is.available() > 0) { 
     System.out.println(is.read()); 
    } 
} 
関連する問題