Tcp实现简单的大小写转换功能
有这样一个需求:
客户端给读物段发送文本,服务端会将文本转换为大写再返回客户端
而且客户端可以不断的进行文本转换,当客户端输入over时,转换结束。
分析:
既然是操作设备上的数据,那么久可以使用io技术,并按照io的操作规律来思考
源:键盘录入
目的:网络设备、网络输出流
而且操作的是文本数据,可以选择字符流
//客户端实现:
package com.shindo.java.tcp; import java.io.*; import java.net.*; /** * 步骤: * 1、建立服务 * 2、获取键盘输入 * 3、将数据发送给服务端 * 4、获取服务端返回的数据 * 5、结束,关闭资源 * 都是文本数据,可以使用字符流进行操作,同时提高效率,加入缓冲 */ public class TransClient { public static void main(String[] args){ try { Socket s = new Socket("127.0.0.1",11013); //定义读取键盘输入的输入流对象 BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in)); //定义目的,将数据写入到Socket的输出流,发给服务端 //方法1: // BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); //方法2:第二个参数为自动刷新的标志,true为自动刷新 PrintWriter out = new PrintWriter(s.getOutputStream(),true); //定义一个Socket的读取流,读取服务端返回的大写信息 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String line = null; while((line = bufr.readLine()) != null){ if("over".equals(line)) break; //方法1: // bufOut.write(line); // bufOut.newLine();//为了让流结束 // bufOut.flush();//刷新缓冲区 //方法2: out.println(line); String strBack = bufIn.readLine(); System.out.println("服务端响应:" + strBack ); } } catch (Exception e) { e.printStackTrace(); } } }
//服务端实现:
package com.shindo.java.tcp; import java.io.*; import java.net.*; /** * 服务端 * 流:Socket读取流 * 目的:Socket输出流 * 都是文本装饰 */ public class TransServer { public static void main(String[] args){ try { //获取客户端对象 ServerSocket ss = new ServerSocket(11013); Socket s = ss.accept(); //打印请求进来的客户端对象 String ip = s.getInetAddress().getHostAddress(); System.out.println(ip + "...... is connected"); //读取Socket读取流中的数据 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //目的Socket输出流,将大写数据写入Socket输出流,发给客户端 //方法1: // BufferedWriter bufOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); //方法2:第二个参数为自动刷新的标志,true为自动刷新 PrintWriter out = new PrintWriter(s.getOutputStream(),true); String line = null; while((line = bufIn.readLine())!= null){ //打印客户端发送过来的数据 System.out.println(line); //将数据转换为大写,然后发送给客户端 //方法1: // bufOut.write(line.toUpperCase()); // bufOut.newLine(); // bufOut.flush(); //方法2: out.println(line.toUpperCase()); s.close(); ss.close(); } } catch (Exception e) { e.printStackTrace(); } } }
效果如图:
客户端:
服务端: