黑马程序员技术交流社区

标题: Socket编程,输入输出流问题 [打印本页]

作者: Eric1225    时间: 2014-10-15 15:14
标题: Socket编程,输入输出流问题
      最近学习研究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();
复制代码

求大神指点!
作者: 付江涛    时间: 2014-10-15 18:16
  1. out=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())),true);
复制代码


这么麻烦。。。

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


作者: 苏乞儿    时间: 2014-10-16 01:05
同楼上,没用过将装饰流加到PrintWriter功能流里面的。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2