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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Eric1225 中级黑马   /  2014-10-15 15:14  /  1793 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

      最近学习研究socket编程,问题是服务器和客户端能够互相通信发送消息,发现当服务器端
  1. socket = server.accept();
复制代码
完成连接后,使用PrintWriter
  1. out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
复制代码
获取输出流,
  1. out.println("发送给客户端");
复制代码
则客户端能够接收到,而用BufferedWriter却不行。不知道为什么。客户端都是使用
  1. BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream()));
复制代码
接受输入流。
附上代码
服务器端核心代码:
  1. while (booleans) {
  2.                                 server = new ServerSocket(8998);
  3.                                 test.append("服务器套接字已经创建成功\n");
  4.                                 while (true) {
  5.                                         test.append("等待客户机连接\n");
  6.                                         socket = server.accept();
  7.                                         read = new InputStreamReader(socket.getInputStream());
  8.                                         out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
  9.                                         while (true) {
  10.                                                 char byt[] = new char[1024];       
  11.                                                 int len = read.read(byt);
  12.                                                 String s = new String(byt, 0, len);
  13.                                                 Date date = new java.util.Date();
  14.                                                 String time = String.format("%tr", date);
  15.                                                 test.append("客户机: " + time + "\n    " + s);
  16.                                                 out.println(convertStr(s));
  17.                                         }
  18.                                 }
  19.                         }
复制代码

客户端核心代码
  1. socket=new Socket("127.0.0.1",8998);
  2.                         writer=new PrintWriter(socket.getOutputStream(),true);
  3.                         test.append("完成连接\n");
  4.                         System.out.println("输入流");
  5.                         final BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream()));
  6.                         Thread thread=new Thread(new Runnable() {
  7.                                 @Override
  8.                                 public void run() {
  9.                                         // TODO Auto-generated method stub
  10.                                          try {
  11.                                                         while(true){
  12.                                                                 System.out.println("ok");
  13.                                                                 String line = null ;
  14.                                                                 while((line=in.readLine())!=null&&!line.equals("")){
  15.                                                                         test.append("服务器返回数据:"+line+"\n");
  16.                                                                 }
  17.                                                         }
  18.                                                 } catch (IOException e1) {
  19.                                                         // TODO Auto-generated catch block
  20.                                                         e1.printStackTrace();
  21.                                                 }
  22.                                 }
  23.                         });
  24.                         thread.start();
复制代码

求大神指点!

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

2 个回复

倒序浏览
  1. out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
复制代码


这么麻烦。。。

直接:
  1. out=new PrintWriter(new OutputStreamWriter(socket.getOutputStream()),true);
复制代码

回复 使用道具 举报
同楼上,没用过将装饰流加到PrintWriter功能流里面的。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马