日期:2014-05-20  浏览次数:20954 次

JAVA有关于IO流求解``!!
为什么客户端发的文字服务端收不到?哪里错了?求指点。。。

下面是客户端
public class TCPClient {
  public static void main(String[] args){
  try{
     Socket s=new Socket("127.0.0.1",6668);
     BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
     BufferedReader brk=new BufferedReader(new InputStreamReader(System.in));
     //BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
     String str="";
do{
str=brk.readLine();
System.out.println("客户:"+str);
    bw.write(str);
bw.flush();
}while(!str.equals("bye"));
         //br.close();
         bw.close();
         s.close();
  }catch(Exception e){
  e.printStackTrace();
  }
  }
}


下面是服务端
public class TestTCPServer {
public static void main(String[] args) {

try {
ServerSocket ss = new ServerSocket(6668);
Socket s = ss.accept();
System.out.println("有一个客户端连接上来了!!~·");
                BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
//BufferedReader brk=new BufferedReader(new InputStreamReader(System.in));
//BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String str="";
do{
str=br.readLine();
System.out.println("客户:"+str);
}while(!str.equals("bye"));
                br.close();
                //bw.close();
                s.close();
                ss.close();

} catch (IOException e) {
e.printStackTrace();
}
}
}

------解决方案--------------------
服务端在str=br.readLine()处阻塞;因为客户端只发送了输入的文字(不带换行符),没发送换行符,readline方法认为一行还没结束,会一直等换行符。应该改客户端的发送部分:
 bw.write(str);
 bw.newLine();//发送换行
 bw.flush();
------解决方案--------------------
引用:
Quote: 引用:

服务端在str=br.readLine()处阻塞;因为客户端只发送了输入的文字(不带换行符),没发送换行符,readline方法认为一行还没结束,会一直等换行符。应该改客户端的发送部分:
 bw.write(str);
 bw.newLine();//发送换行
 bw.flush();

3q3q3q非常感谢了,学习了
,老师还没教,自己在自学中,苦逼中..

=========================================
慢慢来吧,socket以后你是否用到也不好说,如果想学可以自己写socket服务器,
如果想稳定的用在项目,可以看一下apache mina框架。开源的。