黑马程序员技术交流社区
标题:
java为什么flush( )方法不能输出数据,一定要close( )才行?
[打印本页]
作者:
红茶2331
时间:
2013-11-19 20:10
标题:
java为什么flush( )方法不能输出数据,一定要close( )才行?
服务端:
ServerSocket ss=new ServerSocket(40006);
while(true)
{
Socket s=ss.accept();
OutputStream os=s.getOutputStream();
os.write("北京".getBytes());
os.flush();//这里改成os.close( ),客户端就能读到,这是为什么啊?
}
客户端:
try {
Socket s=new Socket("192.168.0.110",40006);
InputStream ins=s.getInputStream();
BufferedReader br=new BufferedReader(new InputStreamReader(ins));
String line;
while((line=br.readLine())!=null)
{
System.out.println(line);
}
复制代码
作者:
ysunday
时间:
2013-11-19 21:15
是第3行的while捣的鬼,服务端先开启,然后执行到05行等待,然后等到客户端执行,客户端执行后,服务端这边才ss.accept()。然后while循环开始转,但是while是个死循环,始终往流里边写数据,然后你客户端的那个17行,就一直读啊读,因为你服务端一直往流里边写数据啊 ,所以客户端这边的读始终读不到null,既然读不到null,那就一直读呗,结果两边都死住了,除非服务端停止写,或者服务端关闭流(关闭流肯定就不写数据了)。
所以要么你让服务端while,停调,要么你关闭流
再说 你这代码写的不是很好啊
Socket s=ss.accept();
OutputStream os=s.getOutputStream();
这两句下载while外边
服务
// TODO Auto-generated method stub
ServerSocket ss=new ServerSocket(40007);
Socket s=ss.accept();
OutputStream os=s.getOutputStream();
int i = 0;
while(i < 2)
{
i++;
os.write("北京".getBytes());
os.flush();//,客户端就能读到,这是为什么啊?
}
复制代码
客户写的还行,能看
作者:
吴琼cola
时间:
2013-11-21 09:05
1.写关于流类的操作,记得要关闭流,不然流一直存在,占用资源。
try{
while(true)
{
Socket s=ss.accept();
OutputStream os=s.getOutputStream();
os.write("北京".getBytes());
os.flush();//这里改成os.close( ),客户端就能读到,这是为什么啊?
}
}catch(Exception e){
e.printStack();
}finally{
关闭流类的操作。
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2