注册 | 登录 忘记密码? 51cto首页 | 博客 | 论坛 | 招聘
热点文章 Cisco IOS下载
 帮助

关于BufferedReader类在客户端与服务器端通信的问题


2007-10-06 17:22:00
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class Client  {
public static final int LISTEN_PORT=5473;
public static final String IP="127.0.0.1";

public static void main(String arg[])
{
Socket s=null;
String str="hello !I 'm coming!!";
BufferedWriter bw=null;
BufferedReader br=null;
/*InetAddress ia=null;
try
{
ia=InetAddress.getByName(IP);
}catch(UnknownHostException e)
{
e.printStackTrace();
}*/

try
{
s=new Socket(IP,LISTEN_PORT);
bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
bw.write(str,0,str.length());
bw.flush();
System.out.println("stay !!!!!");
System.out.println(br.readLine());
}catch(IOException e)
{
e.printStackTrace();
}
finally
{
if (s!=null)
try {
s.close();
} catch (IOException e) {

e.printStackTrace();
}
}
}

}

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
public static final int LISTEN_PORT=5473;

public static void main(String arg[])
{
ServerSocket ss=null;
Socket s=null;
BufferedReader br=null;
BufferedWriter bw=null;

try 
{
 ss=new ServerSocket(LISTEN_PORT);
s=ss.accept();
System.out.println("a connect have come");
br =new BufferedReader(new InputStreamReader(s.getInputStream()));
bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
String str=br.readLine();
System.out.println("stop here!!!");
System.out.println(str);
/*br=new BufferedReader(new InputStreamReader(System.in));
 str=br.readLine();*/
str="weclome!!";

bw.write(str,0,str.length());
bw.flush();
} catch (IOException e) 
{
e.printStackTrace();
}
finally
{
if (s!=null)
try {
s.close();
} catch (IOException e) {

e.printStackTrace();
}
}
}
}
以上分别是客户端与服务器端的代码,执行后,服务器端打印a connect have come,然后停止在了readLine()这里,而客户端打印了stay!!!也停在了readLine() 这里,然后就发生了阻塞,可是客户端竟然打印了stay!!!说明,已经像输出流写入了数据了阿,怎么服务器端会阻塞在readLine,实在不清楚,请大家帮忙看下,指点下,谢谢了




    文章评论
 
2007-10-06 19:58:27
System.out.println(br.readLine());
我记得应该是 全小写 你改变一下 试试看

2007-10-06 20:00:40
使用你的java编译环境,跟踪一下看看那里输出不对 把跟踪结果贴上来

2007-10-06 20:20:14
不关大小写的事吧,
这里pw=new PrintWriter(s.getOutputStream());
    pw.println(str);
    pw.flush();
就是将client里原来的bufferedwriter该为println就不会阻塞
搞不懂,请大家帮忙讲解下

2007-10-06 20:20:16
不关大小写的事吧,
这里pw=new PrintWriter(s.getOutputStream());
    pw.println(str);
    pw.flush();
就是将client里原来的bufferedwriter该为println就不会阻塞
搞不懂,请大家帮忙讲解下

2007-10-06 22:16:57
知道原因了,原来是reanline读入时是读入一行,一定要包括换行符\n在用bufferedwriter的write方法写入的str不包括换行符导致停在了reanline那

2007-10-06 23:08:16
还有就是通过readline包装后的system.in后的字符串也是不包括换行符的

2007-10-07 14:04:16
呵呵,原来是这样
博主挺有钻研精神的

 

发表评论

昵   称:
验证码:  点击图片可刷新验证码  博客过2级,无需填写验证码
内   容: