有这样一个需求:

客户端给读物段发送文本,服务端会将文本转换为大写再返回客户端

而且客户端可以不断的进行文本转换,当客户端输入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();
} }
}

效果如图:

客户端:

服务端:

Tcp实现简单的大小写转换功能的更多相关文章

  1. 在Linux命令行内的大小写转换

    在编辑文本时大小写常常是需要注意的地方,大小写的转换是很枯燥而繁琐的工作,所幸,Linux 提供了很多能让这份工作变得容易的命令.接下来让我们看看都有哪些完成大小写转换的命令. tr 命令 tr (t ...

  2. javaCV开发详解之7:让音频转换更加简单,实现通用音频编码格式转换、重采样等音频参数的转换功能(以pcm16le编码的wav转mp3为例)

    javaCV系列文章: javacv开发详解之1:调用本机摄像头视频 javaCV开发详解之2:推流器实现,推本地摄像头视频到流媒体服务器以及摄像头录制视频功能实现(基于javaCV-FFMPEG.j ...

  3. JAVA之旅(十六)——String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较

    JAVA之旅(十六)--String类,String常用方法,获取,判断,转换,替换,切割,子串,大小写转换,去除空格,比较 过节耽误了几天,我们继续JAVA之旅 一.String概述 String时 ...

  4. VIM 单词大小写转换

    遇到大小写转换的时候,我觉得首先一个不应该直接放弃的选择就是采用正则表达式以及文本替换功能.不过,针对单个单词的转换在VIM中还有更为简单的方式. 组合命令gUw可以实现把光标当前所在位置的一个单词转 ...

  5. js中实现字母大小写转换

    js中实现字母大小写转换主要用到了四个js函数: 1.toLocaleUpperCase  2.toUpperCase3.toLocaleLowerCase4.toLowerCase 下面就这四个实现 ...

  6. java11-5 String类的转换功能

    String的转换功能: byte[] getBytes():把字符串转换为字节数组. char[] toCharArray():把字符串转换为字符数组. static String valueOf( ...

  7. 黄聪:PHP字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、切割成数组等)

    一.字符串替换 str_replace("iwind", "kiki", "i love iwind, iwind said"); 将输出 ...

  8. Java基础知识强化34:String类之String类的转换功能

    1. String类的转换功能 String[] split(String regex)//将字符串变成字符串数组(字符串切割) byte[] getBytes()//将字符串变成字节数组 char[ ...

  9. Netty学习笔记(四) 简单的聊天室功能之服务端开发

    前面三个章节,我们使用了Netty实现了DISCARD丢弃服务和回复以及自定义编码解码,这篇博客,我们要用Netty实现简单的聊天室功能. Ps: 突然想起来大学里面有个课程实训,给予UDP还是TCP ...

随机推荐

  1. Laravel-高级篇-Artisan

    (慕课网_轻松学会Laravel-高级篇_天秤vs永恒老师_http://www.imooc.com/learn/702) 一.概述 Artisan是Laravel中自带的命令行工具的名称 由强大的S ...

  2. EnableDocking

    CFrameWnd::EnableDocking void EnableDocking(DWORD dwDockStyle); 參数: dwDockStyle 指定框架窗体的哪一边可作为控件条的停靠点 ...

  3. [Redux] Extracting Presentational Components -- Todo, TodoList

    Code to be refactored: let nextTodoId = 0; class TodoApp extends Component { render() { const { todo ...

  4. IOS Layer的使用

    CALayer(层)是屏幕上的一个矩形区域,在每一个UIView中都包含一个根CALayer,在UIView上的所有视觉效果都是在这个Layer上进行的. CALayer外形特征主要包括: 1.层的大 ...

  5. NVL函数(NVL,NVL2,NULLIF,COALESCE)

    NVL 语法:NVL( expr1, expr2) 功能:如果expr1为NULL,则NVL函数返回expr2的值,否则返回expr1的值,如果两个参数的都为NULL ,则返回NULL. 注意事项:e ...

  6. oracle包概述(一)【weber出品】

    一.PL/SQL包概述 1. 什么是PL/SQL包: 相关组件的组合:PL/SQL类型.变量,数据结构,和表达式.子程序: 过程和函数 2. 包的组成部分: 由两部分组成: 包头 包体 3. 包的优点 ...

  7. int.Tryparse() 、int.parse()、Convert.To32() 的区别

    int.Tryparse()  Int32.TryParse(source, result)则无论如何都不抛出异常,只会返回true或false来说明解析是否成功,如果解析失败,调用方将会得到0值. ...

  8. SurfaceFlinger

    D:\linux\ubuntu\touch\libhybris\libhybris_0.1.0+git20130606+c5d897a.orig\libhybris-0.1.0+git20130606 ...

  9. 自动化测试CTS命令

    #!/sbin/sh chmod +x /system/bin/input i=0 while [ "$i" != "10" ] do #am instrume ...

  10. 利用JavaScript 的formdata 进行无刷新上传文件

          <html>     <head>         <title></title>         <script type=&quo ...