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

Java TCP练习1

        TCPExercise1Send

package TCPExercise120240817;import java.io.*;
import java.net.Socket;public class TCPExercise1Send {public static void main(String[] args) throws IOException {// 需求// 客户端:发送数据,接受服务器反馈// 服务器:收到消息后给出反馈// 案例分析// 客户端创建对象,使用输出流输出数据// 服务端创建对象,使用输入流接受数据// 服务端使用输出流给出反馈数据// 客户端使用输入流接受反馈数据// 客户端// 创建SocketSocket socket = new Socket("127.0.0.1", 10086);// 创建OutputStream对象BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));// 客户端输出数据bufferedWriter.write("你好,客户端");bufferedWriter.newLine();bufferedWriter.flush();// 关闭输出流socket.shutdownOutput();// 创建InputStream对象接收服务端反馈的数据BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));String line;while ((line = bufferedReader.readLine()) != null) {System.out.print(line);}// 此处关流bufferedReader.close();bufferedWriter.close();socket.close();// 注:十分重要!!!// 客户端发送数据后必须关闭输出流:在客户端发送数据后,应该关闭输出流,这样服务端才能正确读取到数据的结束标志// 服务端读取数据时要处理结束标志:服务端在读取数据时,如果客户端没有关闭输出流,readLine() 方法会一直等待,导致程序阻塞}
}

        TCPExercise1Receive

package TCPExercise120240817;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;public class TCPExercise1Receive {public static void main(String[] args) throws IOException {// 服务端// 创建ServerSocket对象ServerSocket serverSocket = new ServerSocket(10086);// 等待客户端连接Socket socket = serverSocket.accept();// 创建输入流对象BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 读取客户端发送的数据String line;while ((line = bufferedReader.readLine()) != null) {System.out.print(line);}// 给客户端返回数据BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));bufferedWriter.write("服务端已经收到信息");bufferedWriter.newLine();bufferedWriter.flush();// 关流bufferedWriter.close();bufferedReader.close();socket.close();serverSocket.close();}
}

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 部署 K8s 图形化管理工具 Dashboard
  • 【与C++的邂逅】--- 类和对象(上)
  • 【数据结构-1】二叉树
  • haproxy负载均衡(twenty-eight day)
  • C# 重载运算符
  • web自动化测试Day5
  • 举例说明自然语言处理(NLP)技术。
  • Web前端:CSS篇(二)背景,文本,链接
  • 【ML】Image Augmentation)的作用、使用方法及其分类
  • UIScrollView 的 pagingEnabled属性(UIScrollView默认一次滑动多少距离?)
  • 掌握SQL的威力:批量更新与删除的艺术
  • 如何在 Windows/Mac/在线/iPhone/Android 上将 PDF 转换为 Word
  • leetcode算法题之N皇后
  • 软件测试要学习的基础知识——黑盒测试
  • 静态路由与默认路由和实验以及ARP工作原理
  • @angular/forms 源码解析之双向绑定
  • 【Amaple教程】5. 插件
  • canvas绘制圆角头像
  • Cookie 在前端中的实践
  • ES6核心特性
  • Fastjson的基本使用方法大全
  • git 常用命令
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • JavaScript 基本功--面试宝典
  • JS字符串转数字方法总结
  • Koa2 之文件上传下载
  • orm2 中文文档 3.1 模型属性
  • Python学习笔记 字符串拼接
  • Redux 中间件分析
  • Spark学习笔记之相关记录
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 工程优化暨babel升级小记
  • 构建工具 - 收藏集 - 掘金
  • 关于Flux,Vuex,Redux的思考
  • 诡异!React stopPropagation失灵
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 机器学习中为什么要做归一化normalization
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 前端面试之闭包
  • 前言-如何学习区块链
  • 全栈开发——Linux
  • 延迟脚本的方式
  • 移动端唤起键盘时取消position:fixed定位
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​VRRP 虚拟路由冗余协议(华为)
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • (2)STL算法之元素计数
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (javascript)再说document.body.scrollTop的使用问题
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (超详细)语音信号处理之特征提取
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (三十五)大数据实战——Superset可视化平台搭建