TCP通信

第二十一章 网络通信

本章节主要讲解的是TCP和UDP两种通信方式它们都有着自己的优点和缺点  这两种通讯方式不通的地方就是TCP是一对一通信  UDP是一对多的通信方式  接下来会一一讲解

TCP通信

TCP通信方式呢  主要的通讯方式是一对一的通讯方式,也有着优点和缺点  它的优点对比于UDP来说就是可靠一点  因为它的通讯方式是需要先发送消息 看看客户端是否能够接收到消息 如果没有回复消息的话 服务端  就不会发出文件 等待客户端回复消息,这个握手模式的话  就会非常可靠  以下代码进行讲解:

客户端代码:
 

package tcp;import java.io.*;
import java.net.Socket;
import java.util.Scanner;/*** Socket客户端**/
public class SocketClient {public static void main(String[] args) {Socket s = null;try {// 与ip为127.0.0.1、端口为12345的服务端建立连接s = new Socket("127.0.0.1", 12345);// 创建输入流接收服务端发送的消息(字节流)InputStream is = s.getInputStream();// 将服务端返回的字节流转化为字符流InputStreamReader isr = new InputStreamReader(is);// 创建字符流读取缓冲区,方便每行读取BufferedReader br = new BufferedReader(isr);// 创建输出流返回消息OutputStream os = s.getOutputStream();// 创建输出流缓冲PrintWriter pw = new PrintWriter(os);// 创建发送消息的线程Runnable rOut = () -> {boolean flag = true;while (flag) {try {// 接收控制台输入Scanner scan = new Scanner(System.in);String msg = scan.nextLine();// 将输入写入缓冲pw.println(msg);// 将缓冲内的数据推送至服务端并清空缓冲区pw.flush();} catch (Exception e) {flag = false;e.printStackTrace();}}};// 创建接收消息的线程Runnable rIn = () -> {boolean flag = true;while (flag) {try {// 逐行读取服务端返回的消息并打印String str = br.readLine();System.out.println("服务端的消息:" + str);} catch (IOException e) {flag = false;e.printStackTrace();}}};// 启动两个线程Thread tOut = new Thread(rOut);Thread tIn = new Thread(rIn);tOut.start();tIn.start();}catch (IOException e) {try {// 释放资源s.close();} catch (Exception exception) {exception.printStackTrace();}e.printStackTrace();}}
}

服务端代码:

package tcp;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;/*** Socket服务端**/
public class SocketServer {public static void main(String[] args) {ServerSocket ss = null;Socket s = null;try {// 创建监听端口为12345的Socket服务端ss = new ServerSocket(12345);System.out.println("服务端Socket服务已建立,等待客户端连接...");// 通过ss.accept()开始持续监听12345端口,当有连接时获取收到的包装成Socket的客户端对象s = ss.accept();// 获取客户端的IP地址和端口号String ip = s.getInetAddress().getHostAddress();int port = s.getPort();System.out.println("服务端与 " + ip + ":" + port + " 已建立连接");// 创建输入流接收客户端发送的消息(字节流)InputStream is = s.getInputStream();// 将客户端发送的字节流转化为字符流InputStreamReader isr = new InputStreamReader(is);// 创建字符流读取缓冲区,方便每行读取BufferedReader br = new BufferedReader(isr);// 创建输出流返回消息OutputStream os = s.getOutputStream();// 创建输出流缓冲PrintWriter pw = new PrintWriter(os);// 创建接受信息的线程Runnable rIn = () -> {boolean flag = true;while (flag) {try {// 逐行读取客户端发送的消息并打印String str = br.readLine();System.out.println("客户端的消息:" + str);} catch (IOException e) {flag = false;e.printStackTrace();}}};// 创建发送消息的线程Runnable rOut = () -> {boolean flag = true;while (flag) {try {// 接收控制台输入Scanner scan = new Scanner(System.in);String msg = scan.nextLine();// 将输入写入缓冲pw.println(msg);// 将缓冲内的数据推送至客户端并清空缓冲区pw.flush();} catch (Exception e) {flag = false;e.printStackTrace();}}};// 开启两个线程Thread tIn = new Thread(rIn);Thread tOut = new Thread(rOut);tIn.start();tOut.start();} catch (IOException e) {try {// 释放资源ss.close();s.close();} catch (Exception exception) {exception.printStackTrace();}e.printStackTrace();}}
}

服务端代码图已经客户端的代码图:

运行结果图如下所示:

缺点也从而发现 TCP程序是一对一的通信而如果碰到了需要发通知给好几个的话 这样的话需要重复这些操作这样就会很麻烦  所以这里就需要使用到UDP通信 一对多来通信 下一个博客将会讲解UDP一对多通信

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何在Android平板上远程连接Ubuntu服务器使用code-server代码开发

目录 1.ubuntu本地安装code-server 2. 安装cpolar内网穿透 3. 创建隧道映射本地端口 4. 安卓平板测试访问 5.固定域名公网地址 6.结语 1.ubuntu本地安装code-server 准备一台虚拟机,Ubuntu或者centos都可以,这里以VMwhere ubuntu系统为例 下载code server服务…

el-table 表格多选(后端接口搜索分页)实现已选中的记忆功能。实现表格数据和已选数据(前端分页)动态同步更新。

实现效果:(可拉代码下来看:vue-demo: vueDemo) 左侧表格为点击查询调用接口查询出来的数据,右侧表格为左侧表格所有选择的数据,由前端实现分页。 两个el-table勾选数据联动更新 实现逻辑: el-…

低代码开发到底是补品还是垃圾食品?

2023,低代码彻底火了,甚至火到没有点相关经验,都不好意思出去面试的程度。 从业者对低代码的发展充满了想象,都认为未来低代码的商业价值不可估量。 据Gartner的最新报告显示,2023年全球低代码开发技术市场规模预计将…

内部文件上传以及渲染-接口API

文件上传 地址http://172.16.0.118:8090/api/pm/base/affix/upload请求类型POSTContent-Type:text/plain;charsetutf-8参数 prjData {"prjId":"", "jobId":"3031b2c8-c809-4110-8e88-22c80a9c1ec0721aca89-96a1-4346-9b6e-022331d221d1Nec…

【EMNLP 2023】面向Stable Diffusion的自动Prompt工程算法BeautifulPrompt

近日,阿里云人工智能平台PAI与华南理工大学朱金辉教授团队合作在自然语言处理顶级会议EMNLP2023上发表了BeautifulPrompt的深度生成模型,可以从简单的图片描述中生成高质量的提示词,从而使文生图模型能够生成更美观的图像。BeautifulPrompt通…

【MATLAB】MODWT分解+FFT+HHT组合算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 MODWT分解FFTHHT组合算法是一种综合性的信号处理方法,它结合了经验小波变换(Empirical Wavelet Transform,EWT)、快速傅里叶变换&#xff…

爱智EdgerOS之深入解析如何应用爱智的视频流模块完成拉流

一、ONVIF 规范和常见视频流传输协议 ① ONVIF 规范 随着视频监控产业链的成熟,市面上陆陆续续出现了各式各样的网络摄像设备,这些设备都需要通讯协议才能进行数据传输。早期厂商都采用私有协议,但是现在厂商分工明确,有的负责生…

程序员的技术成长攻略

推荐语:偶尔在公众号看到的一篇文章,写的非常好,在此分享给各位程序员兄弟,不光是对技术成长有帮助,其他领域也是同样适用的!建议反复阅读,形成一套自己的技术成长策略。 原文地址:…

【EI会议征稿】2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024)

2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024) 2024 Guangdong-Hong Kong-Macao Greater Bay Area International Conference on Digital Economy and Artificial Intelligence(DEAI2024) 2024年粤港澳大湾区数字经济与人工智能国际学术会议(DEAI2024)由广东科…

探索鸿蒙 TextInput组件

TextInput 根据组件名字,可以得知他是一个文本输出框。 声明代码👇 TextInput({placeholder?:ResourceStr,text?:ResourceStr}); placeholder: 就是提示文本,跟网页开发中的placeholder一样的 text:输入框当前的文本内容 特殊属…

52 代码审计-PHP项目类RCE及文件包含下载删除

目录 漏洞关键字:演示案例:xhcms-无框架-文件包含跨站-搜索或应用-includeearmusic-无框架-文件下载-搜索或应用功能-down等zzzcms-无框架-文件删除RCE-搜索或应用-unlink、eval 漏洞关键字: SQL注入: select insert update mysql_query mysql等 文件上传&#xff…

【FreeRTOS】信号量——简介、常用API函数、注意事项、项目实现

在FreeRTOS中,信号量是一种非常重要的同步机制,用于实现任务间的互斥访问和同步操作。通过信号量,不同的任务可以安全地共享资源,避免竞争和冲突,从而确保系统的稳定性和可靠性。本篇博客将介绍FreeRTOS中信号量的基本…

使用Huggingface创建大语言模型RLHF训练流程的完整教程

ChatGPT已经成为家喻户晓的名字,而大语言模型在ChatGPT刺激下也得到了快速发展,这使得我们可以基于这些技术来改进我们的业务。 但是大语言模型像所有机器/深度学习模型一样,从数据中学习。因此也会有garbage in garbage out的规则。也就是说…

AUTOSAR CP Int-Watchdog简介

Int Watchdog 1 简介2 EB 中配置 TC39X3 Wdg 在代码中使用1 简介 内部看门狗驱动[sws_Wdg_00161]要访问内部看门狗硬件,对应的 Wdg 模块实例应该直接访问看门狗服务的硬件。提示:内部看门狗驱动程序是微控制器抽象层的一部分,它允许直接的硬件访问。注意:内部看门狗的日常服…

第21章总结 网络通信

21.1 网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java已经将网络程序所需要的元素封装成不同的类,用户只要创建这些类的对象,使用相应的方法,即使不具备有关的网络知识,也可以编写出高质量的网络通信程序…

【评测脚本】机器信息评测(初版)

背景 QA的实际工作过程中,除了业务相关的测试外,也会涉及到一些评测相关的工作,甚至还要做多版本、多维度的评估分析。尤其是现在火热的大模型,相关的评测内容更是核心中的核心。当然本文的内容只是做一些初级的机器相关的评测信息,更多更广的评测需要更多时间的积累和总…

JVM的内存结构详解「重点篇」

一、JVM虚拟机数据区 虚拟机栈 1、 线程私有 2、 每个方法被执行的时候都会创建一个栈帧用于存储局部变量表,操作栈,动态链接,方法出口等信息。每一个方法被调用的过程就对应一个栈帧在虚拟机栈中从入栈到出栈的过程。 3、栈帧: 是用来存储…

安装mysql数据库

1.1下载APT存储库(下载链接) 1.2安装APT存储库(注意好正确的路径) 将下载的文件传输到linux服务器对应目录下后执行以下命令: sudo dpkg -i mysql-apt-config_0.8.10-1_all.deb 选择mysql5.7 然后点击ok 然后执行 s…

应用架构——集群、分布式、微服务的概念及异同

一、什么是集群? 集群是指将多台服务器集中在一起, 每台服务器都实现相同的业务,做相同的事;但是每台服务器并不是缺 一不可,存在的主要作用是缓解并发能力和单点故障转移问题。 集群主要具有以下特征: …

JAVA使用POI向doc加入图片

JAVA使用POI向doc加入图片 前言 刚来一个需求需要导出一个word文档,文档内是系统某个界面的各种数据图表,以图片的方式插入后导出。一番查阅资料于是乎着手开始编写简化demo,有关参考poi的文档查阅 Apache POI Word(docx) 入门示例教程 网上大多数是XXX…