TCP通信

基于QT的TCP通信 利用QTcpServer类以及QTcpSocket类进行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一对多通信

java TCP通信 java TCP通信 一、相关知识学习   TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。基于TCP网络通讯实现的类主要有服务器端的ServerSocket用客户端的Socket。TCP类似于电话系统,建立双向的通信通道,确定连接,话音顺序接听。... 阅读详情

相关推荐

TCP 通信流程图

如果需要更加具体的代码示例、协议细节或者其他场景(例如 UDP、WebSocket、反向连接等),请告诉我!为便于阅读,采用 ASCII 画出大致示意。协议进行通信时的各个步骤。

qq_46243318的博客 2652

C++中的TCP通信

TCP通信服务端和客户端代码是不同的。首先,服务端有一个ServerSocket,初始化以后(包括设置IP和端口,绑定监听等过程),这些都设置好以后,就可以使用accept()方法等待客户端连接了,这个方法是阻塞的。一旦连接成功,就会返回一个新的Socket,使用这个Socket就可以接收数据和发送数据了。客户端自始始终都只有一个Socket,这个Socket初始化以后,使用connect()方法和服务器进行连接,

jialiang的博客 4万+

TCP通信模型详解

各类资料学习下载合集​​TCP(传输控制协议)是网络通信中最重要的协议之一,广泛应用于互联网中的数据传输。作为一种面向连接的协议,TCP提供可靠的、顺序的以及无差错的数据传输,确保数据完整性。本文将详细讲解TCP通信模型的原理、工作流程,并通过Python实现一个简单的TCP客户端-服务器模型,展示TCP通信的实际应用。

Web安全工具库 1246

TCP通信实现

本文介绍了如何实现TCP通信,以及通过TCP通信引入了通信过程中,每个层协议数据的封包过程,以及封包内容,封包过程,

2301_78622258的博客 2975

CanMV K230实战:用MicroPython玩转AI视觉识别(附完整代码)

本文详细介绍了如何使用MicroPython在CanMV K230开发板上实现AI视觉识别,包括环境搭建、摄像头配置、模型部署及优化技巧。通过实战案例(如智能门禁和工业分拣机器人),展示如何快速开发低门槛的嵌入式AI应用,特别适合初学者和嵌入式开发者。

x8y9z0的博客 1143

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如图一所示。差异(differences):MemSeg引入人工模拟的异常图像在训练阶段使模型能够区分正常和异常的图像,减轻了半监督学习只能用正常样本进行训练的不足,然后在推理阶段可以直接输入图像无需做任何后处理。共性(commonalities):MemSeg引入了一个记忆池来记录正常样本的通用模式,在训练和推理阶段,比较输入图像和记忆池中的样本之间的差异,为异常区域的定位提供有用的信息。

斯人若彩虹,遇上方知有! 4841

python modbus 实现TCP 通信

python modbus_tk 实现tcp 通信下载对应pip由于没有硬件设备,采用软件模拟,软件下载地址为下载安装好开始连接,第一次连接需要激活模拟创建一个HOLDING_REGISTERS点击左上角file-new依次创建 以下 模拟器点击Display-communication开始显示协议传输信息编写python代码我对modbus_tk.defines中文件进行简单翻译程序输出结果如下...

DXDSuper博客 3万+

HyperLPR3车牌识别-Android-SDK光速部署与使用

基于深度学习高性能中文车牌识别 High Performance Chinese License Plate Recognition Framework.快速部署AndroidSDK

tunm 6119

Qt之TCP通信

TCP 协议(Transmission Control Protocol)全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP是大多数 Internet 协议(包括 HTTP 和 FTP)用于数据传输的低级网络协议。它是一种可靠的,面向流,面向连接的传输协议。它特别适合连续数据传输。TCP 通信必须先建立 TCP 连接,通信端分为客户端和服务端。服务端通过监听某个端口来监听是否有客户端连接到来,如果有连接到来,则建立新的 socket 连接;

风间琉璃的博客 1万+

FPGA可重构技术

介绍FPGA 可重构技术的实现方法,包括全局重构和部分重构

航天领域资深码农,型号经验丰富,一线干货分享 1989

RK3588 Linux启动优化至亚秒级全链路剖析

本文深入探讨RK3588平台Linux系统启动加速技术,涵盖从BL1/ATF安全固件、U-Boot剪裁到内核精简化等全链路优化方案,实现从上电到用户脚本800ms内完成的实战经验。​​文末提供完整解决方案获取方式​​。由于在 ARMv6 之后引入了 TrustZone 模块, 目前市面上 ARMv7 和 ARMv8 之后的系统都会包含了该模块, 这个模块由 BL1 启动, 且在 ATF(ARM Trust Firmware) 固件中, 既安全世界中引导到 BL33 (UBOOT)的系统。

韩若明溪 1777

TCP 通信流程

本文主要对TCP通信的流程进行了讲解,对其中的函数参数及返回值进行说明,同时设定一个简单的打电话模拟场景去帮助我们了解通信的流程。

bx1091182836的博客 5552

把 ABAP Unit 测试放进本地类:让重构更安全、让测试更好找的组织方式

ABAP测试代码组织策略:单元测试与集成测试的合理存放位置 本文针对ABAP开发中测试代码组织混乱的问题,提出了一套系统化的解决方案: 单元测试应存放在被测类的本地测试include中(...CCAU或...T99),确保测试与代码同步演进且易于发现 跨对象测试(组件/集成/系统测试)应创建单独的全局测试类,并通过FOR TESTING和ABSTRACT进行防护 使用! @testing注释建立测试关系,使测试与被测对象明确关联,提高可发现性 针对不同技术栈(RAP/CAP/OData)提供了具体落地建议,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1729

【QT】QT实现TCP通信

QT中的TCP通信原理及实现 (如果看着繁琐,可直接定位到文章末尾,有源码连接) QT中可以通过TCP协议让服务器和客户端之间行通信。服务器和客户端的具体流程: A、服务器: 1.创建QTcpServer对象 2.启动服务器(监听)调用成员方法listen(QHostAddress::Any,端口号) 3.当有客户端链接时候会发送newConnection信号,触发槽函数接受链接(得到一个与客户端通信的套接字QTcpSocket) 4.QTcpsocket发送数据用

mitongxue的博客 2万+

使用R语言获取泊松回归模型的事件密度比(Incidence Rate Ratio,IRR)的95%置信区间

在泊松回归模型中,我们通常关注的是自变量对事件发生率的影响,而事件密度比(Incidence Rate Ratio,IRR)可以帮助我们理解不同自变量对事件发生率的相对影响。在本文中,我们将使用R语言来获取泊松回归模型所有系数的事件密度比的95%置信区间。通过以上步骤,我们可以使用R语言获取泊松回归模型所有系数的事件密度比的95%置信区间。为了获取事件密度比的置信区间,我们将使用。使用R语言获取泊松回归模型的事件密度比(Incidence Rate Ratio,IRR)的95%置信区间。

BugCrusher的博客 1264

Ardupilot无人船(车)mavros自主控制

rover 4.4。

超维空间科技的博客 3229

Java---TCP通信

目录1.TCP通信-快速入门编写客户端代码步骤:客户端发送消息总结:需求:服务端实现步骤总结:2.TCP通信-多发多收消息案例:使用TCP通信实现:多发多收消息总结:*3.TCP通信-同时接受多个客户端消息[重点]总结:4.TCP通信-使用线程池优化总结:5.TCP通信实战案例-即时通信总结:6.TCP通信实战案例-模拟BS系统[了解]总结:TCP协议:TCP是一种面向连接,安全、可靠的传输数据的协议传输前,采用“三次握手”方式,点对点通信,是可靠的在连接中可进行大数据量的传输TCP通信模式演示:Socke

weixin_65440201的博客 4823

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Qt中的TCP通信

Qt中的TCP通信

龙木南的博客 7967

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Linux——socket编程之tcp通信

前面我们学习,了解到了socket的概念与udp的实现方法,今天我们来学习一下面向连接的tcp通信。

kkbca的博客 2189

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

TCP通信协议

分片不同TCP 的数据大小如果大于 MSS 大小,则会在传输层进行分片,目标主机收到后,也同样在传输层组装 TCP 数据包,如果中途丢失了一个分片,只需要传输丢失的这个分片UDP 的数据大小如果大于 MTU 大小,则会在 IP 层进行分片,目标主机收到后,在 IP 层组装完数据,接着再传给传输层,但是如果中途丢了一个分片,则就需要重传所有的数据包,这样传输效率非常差,所以通常 UDP 的报文应该小于 MTU。所以当服务端出现大量 TIME_WAIT 时,系统资源被占满时,会导致处理不过来新的连接。

qq_20312079的博客 3392

matlab中TCP通信的相关函数

matlab中TCP的通信常用属性介绍 下面是tcpip的属性: Name: TCP对象的名字 RemoteHost: 远程端的IP地址 RemotePort: 远程端的端口 InputBufferSize: 默认情况下,TCP/IP对象的InputBufferSize为512,这意味着它一次只能读取512字节,可以设置为更大的值。 OutputBufferSize: OutputBuf...

永不言弃 7270

TCP通信程序

TCP通信原理TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象, 从而在通信的两端形成网络虚拟链路,一旦建立 了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。 Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信Java为客户端提供了Socket谈,为服务器端提供...

august197210的博客 320

C#的TCP通信

.NET的UDP通信我死活玩不转,听说UDP库类有bug,所以我就不瞎折腾了,精力转向TCP。TCP是连接模型,如下:服务器连接                     服务器断开    ↓                                   ↑服务器接收→服务器处理→服务器发送    ↑                                   ↓客户端发送←客户端

DCSOFT 5896

Qt 实现TCP通信和UDP通信

该示例中,我们使用QUdpSocket创建一个名为socket的socket对象,并将其绑定到指定IP地址和端口号,在接收数据时,使用readDatagram函数读取数据并输出到控制台;QT中实现TCP通信主要用到了以下类:QTcpServer、QTcpSocket、QHostAddress等;QT中实现UDP通信主要用到了以下类:QUdpSocket、QHostAddress等;

每一个不曾起舞的日子,都是对生命的辜负 3488
上一篇: 第二十一章 网络通信
下一篇: UDP通信
JOSOD
博客等级 码龄4年 52粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值