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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

package cn.itcast.net.p4.tcp.test;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TextTransClient {
public static void main(String[] args) throws UnknownHostException, IOException {
  /*
   * 文本大写转换客户端:
   *  将文本通过键盘录入的形式,发送给服务端,服务端将其转换成大写在反馈给客户端.
   *  当客户端输入的是over时,录入结束.
     */
  
  //1,socket对象。
  Socket s  = new Socket("192.168.1.253",10004);
  
  //2,键盘录入。
  BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
  
  //3,获取socket输出流。并对其进行转换变成字符流。
BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//OutputStreamWriter不是把字符流转换成字节流吗,怎么可能会把字节流转成字符流呢.
//4,获取socket输入流,读取服务端返回的大写数据.
  BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
  
  //5,循环读取。
  String line = null;
  
  //读取键盘录入。
  while((line=bufr.readLine())!=null){
   if("over".equals(line)){
    break;
   }
   //将读取到的数据打印到服务端。
   out.println(line);
   
   //从服务端获取大写数据。
   String str = bufIn.readLine();
   System.out.println("trans:"+str);
   
  }
  
  s.close();
}
}




评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1 赞一个!

查看全部评分

3 个回复

倒序浏览
OutputStreamWriter是字符流通向字节流的桥梁:可使用指定的字符集将要写入流中的字符编码成字节

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class TextTransClient {
public static void main(String[] args) throws UnknownHostException,
   IOException {
  Socket s = new Socket("192.168.1.253", 10004);
  BufferedReader bufr = new BufferedReader(new InputStreamReader(
    System.in));
  BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
  //PrintWriter out = new PrintWriter(s.getOutputStream());//-----------------------问题1
  BufferedReader bufIn = new BufferedReader(new InputStreamReader(
    s.getInputStream()));
  String line = null;
  
  while ((line = bufr.readLine()) != null) {
   if ("over".equals(line)) {
    break;
   }
   
   /*
    * 这里要么你就定义PrintWriter out = new PrintWriter(s.getOutputStream())用来向发数据
    * 要么你就把out.println(line)改成bufOut.write(line);
    */
   bufOut.write(line); //-----------------------问题2
   String str = bufIn.readLine();
   System.out.println("trans:" + str);
  }
  s.close();
bufr.close();//--------------问题3
}
}
回复 使用道具 举报
没人知道吗,大家帮忙看看嘛
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//OutputStreamWriter
不是把字符流转换成字节流吗,怎么可能会把字节流转成字符流呢.
回复 使用道具 举报
王月 发表于 2012-6-15 21:02
没人知道吗,大家帮忙看看嘛
new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));//Output ...

你要知道这个流是一个输出流,也就是数据从BufferedWriter中写入到OutputStreamWriter,再写入到s.getOutputStream(),里面去。
BufferedWriter就是带缓冲区的字符流,s.getOutputStream(),返回的就是字节流,而OutputStreamWriter不正是把字符流转成字节流啊。
你怎么会把它理解成字节流专心字符流呢?你把数据的流向理解反了!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马