2010-03-07 66 views
0

我有一個問題,我學會了如何與插座的工作,我寫與下面的代碼PROGRAMM:的Java,Socket和傳輸文本

import java.net.*; 
import java.io.*; 
import java.util.*; 

public class Client extends Thread{ 

     public static void main(String args[]) 
     { 
      try 
      { 

       Socket s = new Socket(args[0],Integer.parseInt(args[1])); 
       BufferedReader br=new BufferedReader(new InputStreamReader(System.in,"CP866")); 
       String str; 
       str=br.readLine(); 
       str = str+"\n"+s.getInetAddress().getHostAddress() 
       +":"+s.getLocalPort(); 
       PrintWriter pw = new PrintWriter(new OutputStreamWriter(s.getOutputStream())); 
       pw.println(str); 
       pw.flush(); 
       while(true){ 
        str=null; 
        if((str=br.readLine())==null) 
        break; 
        str = str+"\n"+s.getInetAddress().getHostAddress() 
        +":"+s.getLocalPort(); 
        System.out.println(str); 
       pw.print(str); 
       pw.flush(); 
       } 
      } 
      catch(Exception e) 
      {System.out.println("init error: "+e);} 
     } 

} 

PROGRAMM服務器端只打印獲得的消息,第一條消息正常打印,但下一條消息打印格式爲:,當我切25-26行時 - 消息未發送或未獲得。

爲什麼?

+0

您可以構建PrintWriter的是這樣的:新的PrintWriter(...,真); True表示自動沖洗。這非常方便。 – 2010-03-07 11:02:15

+0

謝謝,我知道但是當我用socket解決問題時,我沒有想到寫任何東西=) – 2010-03-07 11:36:38

回答

1

你寫了print(str);。所以你不打印換行符(\ n)。您的服務器端也使用BufferedReader(我supose)。他正在閱讀,直到換行。

因此改變println(str);

+0

謝謝,你說的對,我剛剛學習Java並且有時候感到困惑 – 2010-03-07 11:16:18