A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  1. 服务端:
  2. ServerSocket ss=new ServerSocket(40006);
  3. while(true)
  4. {
  5. Socket s=ss.accept();
  6. OutputStream os=s.getOutputStream();
  7. os.write("北京".getBytes());
  8. os.flush();//这里改成os.close( ),客户端就能读到,这是为什么啊?
  9. }

  10. 客户端:
  11. try {
  12. Socket s=new Socket("192.168.0.110",40006);
  13. InputStream ins=s.getInputStream();
  14. BufferedReader br=new BufferedReader(new InputStreamReader(ins));
  15. String line;
  16. while((line=br.readLine())!=null)
  17. {
  18. System.out.println(line);
  19. }
复制代码

评分

参与人数 1技术分 +1 黑马币 +2 收起 理由
枫儿 + 1 + 2 很给力!

查看全部评分

2 个回复

倒序浏览
是第3行的while捣的鬼,服务端先开启,然后执行到05行等待,然后等到客户端执行,客户端执行后,服务端这边才ss.accept()。然后while循环开始转,但是while是个死循环,始终往流里边写数据,然后你客户端的那个17行,就一直读啊读,因为你服务端一直往流里边写数据啊 ,所以客户端这边的读始终读不到null,既然读不到null,那就一直读呗,结果两边都死住了,除非服务端停止写,或者服务端关闭流(关闭流肯定就不写数据了)。
所以要么你让服务端while,停调,要么你关闭流

再说 你这代码写的不是很好啊  
Socket s=ss.accept();
OutputStream os=s.getOutputStream();
这两句下载while外边

服务
  1.         // TODO Auto-generated method stub
  2.                 ServerSocket ss=new ServerSocket(40007);
  3.                 Socket s=ss.accept();
  4.                 OutputStream os=s.getOutputStream();
  5.                 int i = 0;
  6.                 while(i < 2)
  7.                 {
  8.                         i++;
  9.                 os.write("北京".getBytes());
  10.                 os.flush();//,客户端就能读到,这是为什么啊?
  11.                 }
复制代码
客户写的还行,能看

评分

参与人数 1技术分 +1 收起 理由
FFF + 1 同学,你好厉害哦!~~很精彩的回答~!.

查看全部评分

回复 使用道具 举报
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{
     关闭流类的操作。
}

评分

参与人数 1黑马币 +3 收起 理由
FFF + 3 淡定,回答还是应该再努力一些~不能太水的~.

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马