当前位置: 首页 > news >正文

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();
        }
        
    }
}
View Code

 

//服务端实现:

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();
        }
        
    }
}
View Code

 

效果如图:

客户端:

 

服务端:

 

转载于:https://www.cnblogs.com/shindo/p/5297272.html

相关文章:

  • uboot里读sd卡内容
  • Redis 主从复制
  • printk打印指针变量
  • 123
  • Bzoj 1984: 月下“毛景树” 树链剖分
  • 跨域访问解决方案:JSONP
  • maven工程打包jar以及java jar命令的classpath使用
  • ss 命令,第二代net-tools
  • Windows Iot:让Raspberry Pi跑起来(1)
  • js 点击弹窗以外 关闭弹窗
  • 几种经典排序算法的JS实现
  • solr多条件查询(二)
  • 网络基础(一)ARP!!!
  • Java NIO系列教程(一) Java NIO 概述
  • function name address vs array name address
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 4个实用的微服务测试策略
  • Android开源项目规范总结
  • Docker入门(二) - Dockerfile
  • gops —— Go 程序诊断分析工具
  • Java 内存分配及垃圾回收机制初探
  • Javascript弹出层-初探
  • JAVA并发编程--1.基础概念
  • Leetcode 27 Remove Element
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • node和express搭建代理服务器(源码)
  • Python学习笔记 字符串拼接
  • unity如何实现一个固定宽度的orthagraphic相机
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 关于List、List?、ListObject的区别
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 我这样减少了26.5M Java内存!
  • 移动端解决方案学习记录
  • Play Store发现SimBad恶意软件,1.5亿Android用户成受害者 ...
  • 函数计算新功能-----支持C#函数
  • #HarmonyOS:基础语法
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (NO.00004)iOS实现打砖块游戏(十二):伸缩自如,我是如意金箍棒(上)!
  • (poj1.2.1)1970(筛选法模拟)
  • (TipsTricks)用客户端模板精简JavaScript代码
  • (八)c52学习之旅-中断实验
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)Sublime Text3配置Lua运行环境
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET Standard、.NET Framework 、.NET Core三者的关系与区别?
  • .NET 反射 Reflect
  • .net 微服务 服务保护 自动重试 Polly
  • .net6+aspose.words导出word并转pdf
  • //解决validator验证插件多个name相同只验证第一的问题
  • /run/containerd/containerd.sock connect: connection refused
  • @RequestMapping用法详解
  • @selector(..)警告提示
  • [ C++ ] 继承
  • []C/C++读取串口接收到的数据程序