2011-10-05 30 views
0
Socket s1=new Socket("localhost",3001); 
System.out.println("Client process"); 
byte b[]=new byte[150]; 
int n=4; 
BufferedReader BR=new BufferedReader(new InputStreamReader(s1.getInputStream())); 
String str=new String(); 
while((str=BR.readLine())!=null) 
{ 
    System.out.println(); 
    System.out.println(str); 
} 
s1.close(); 

在上面的代碼中,我試圖從服務器讀取一行並在客戶端機器上打印該行。但客戶端無法讀取一行,直到服務器寫完所有行並關閉爲止。請幫助我如何一次從服務器讀取一行。如何在循環中通過服務器發送一行?

+0

你能修改服務器代碼嗎?如果是的話,請同時顯示該代碼。 –

+0

ServerSocket s1 = new ServerSocket(3001); \t \t Socket ClientSocket = s1.accept(); \t \t的RandomAccessFile爲Ra =新RandomAccessFile的( 「C:/HelloWorld.java」, 「R」); \t \t OutputStream OS = ClientSocket.getOutputStream(); \t \t String str = new String(「hai」); \t \t的BufferedReader BR =新的BufferedReader(新的InputStreamReader(System.in)); \t \t而((STR = Ra.readLine())!= NULL) \t \t { \t \t \t的System.out.println(STR); \t \t \t BR.read(); \t \t \t OS.write(str.getBytes()); \t \t} \t \t ClientSocket.close(); – pavi

+0

你是否偶然使用'nio'?代碼應該使用普通的'io'工作。你是否遇到了一些你沒有抓住的例外?你的代碼與[從插座讀取文本的示例庫]上的代碼非常相似(http://www.exampledepot.com/egs/java.net/ReadFromSocket.html) – Ali

回答

0

檢查服務器是否在每行後刷新其輸出流。

+0

我甚至試過。但輸出沒有變化。 – pavi

0

客戶端代碼:

Socket s1=new Socket("localhost",4444); 
    System.out.println("Client process"); 
    byte b[]=new byte[150]; 
    int n=4; 
    BufferedReader BR= new BufferedReader(new InputStreamReader(s1.getInputStream())); 
    String str=new String(); 
    while((str=BR.readLine())!=null) {  
     System.out.println();  
     System.out.println(str); 
    } 
    s1.close(); 

簡單的服務器代碼:

ServerSocket serverSocket = null;   
    try {    
     serverSocket = new ServerSocket(4444); 
     } 
    catch (IOException e) { 
     System.err.println("Could not listen on port: 4444."); 
     System.exit(1);  
    }   
    Socket clientSocket = null; 
    try {   
     clientSocket = serverSocket.accept(); 
    } 
    catch (IOException e) { 
     System.err.println("Accept failed."); 
     System.exit(1); 
    }   
    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
    BufferedReader in = new BufferedReader( 
      new InputStreamReader(clientSocket.getInputStream())); 
    String inputLine, outputLine; 
    // write to client 
    for(int i=0;i<10;i++){ 
     out.println("hello from server" + i); 
     Thread.sleep(1000); 
     System.out.println("Server sent " + i); 
    } 

    out.close();   
    in.close();   
    clientSocket.close();   
    serverSocket.close();  
    System.err.println("Server done.. closing now.."); 

PS:添加到這些主要方法,並添加投用適當的例外條款。

相關問題