2010-03-07 29 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