网络编程 TCP/UDP通信

网络编程 TCP/UDP通信

  • 1. 0.0.0.0地址与客户端bind函数
  • 2. UDP 服务器与客户端通信
  • 3. TCP 服务器与客户端通信

1. 0.0.0.0地址与客户端bind函数

  1. 0.0.0.0的地址作用
    在网络编程中,0.0.0.0是一个特殊的IP地址,通常用于表示"任意地址"或"所有地址"。当服务器绑定到0.0.0.0时,表示它可以接受来自任意IP地址的连接。这对于监听多个网络接口或多个IP地址的服务器非常有用。

  2. 客户端不需要显式绑定端口
    动态分配端口: 客户端通常不关心使用哪个本地端口,因此可以让操作系统动态分配一个可用端口。通过在 socket 创建后不显式调用 bind 函数,操作系统会自动为客户端分配一个合适的本地端口。
    多连接: 如果客户端需要与多个服务器建立连接,显式绑定端口可能会引入复杂性。通过动态分配端口,可以更轻松地处理多个连接,而不必担心端口冲突。

2. UDP 服务器与客户端通信

在网络编程中,UDP(User Datagram Protocol)是一种无连接、不可靠的传输协议,适用于一些实时性要求较高的场景。UDP通过数据报进行通信,不保证数据的可靠性,但通常传输速度较快。下面将介绍一个简单的UDP服务器与客户端通信的示例代码。

在这里插入图片描述

  1. UDP服务器

代码结构

udpserver 类: 该类封装了UDP服务器的相关操作,包括初始化、运行等。
构造函数: 接受端口号和IP地址作为参数,用于初始化服务器对象。
析构函数: 关闭服务器套接字。
init 函数: 初始化服务器套接字,创建UDP套接字,绑定到指定地址和端口。
run 函数: 服务器的运行函数,循环接收客户端消息并回复。
main 函数: 作为程序的入口,从命令行参数获取端口号,创建 UDP 服务器对象,进行初始化并运行。

程序执行流程

命令行参数检查: 主函数首先检查命令行参数,确保用户输入的命令行参数为端口号。
UDP 服务器对象创建: 根据用户输入的端口号,创建了一个 udpserver 对象。
服务器初始化init 函数中完成了服务器套接字的创建、绑定等初始化操作。
服务器运行run 函数中通过 recvfrom 接收客户端的UDP消息,并通过 sendto 发送回复

  1. UDP客户端

代码结构

main 函数: 作为程序的入口,从命令行参数获取服务器的IP地址和端口号,创建 UDP 客户端套接字,并实现消息的发送和接收。

程序执行流程

命令行参数检查: 主函数首先检查命令行参数,确保用户输入的命令行参数为服务器的IP地址和端口号。
UDP 客户端套接字创建: 使用 socket 函数创建UDP套接字,如果创建失败则输出错误信息并退出。
服务器地址配置: 创建并配置 server 结构体,用于存储服务器地址信息。
消息交互循环: 使用 sendto 发送用户输入的消息到服务器,并使用 recvfrom 接收服务器的回复消息。
消息输出: 将服务器的回复输出到标准输出。
循环迭代: 通过循环迭代,实现不断地与服务器进行消息交互。

3. TCP 服务器与客户端通信

在计算机网络编程中,TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输协议。与UDP不同,TCP提供可靠的数据传输,确保数据的完整性和有序性。下面将介绍一个简单的TCP服务器与客户端通信的示例代码。
在这里插入图片描述

  1. TCP服务器

代码结构

main 函数: 作为程序的入口,从命令行参数获取服务器的端口号,创建TCP服务器套接字,并通过多线程实现与多个客户端的并发通信。
Tcpserver 类: 封装了TCP服务器的相关操作,包括初始化、启动、处理客户端请求的服务函数等。
threadData 类: 用于传递数据给新创建的线程,存储了与客户端相关的信息。

程序执行流程

命令行参数检查: 主函数首先检查命令行参数,确保用户输入的命令行参数为服务器的端口号。
服务器对象创建: 根据用户输入的端口号创建了Tcpserver对象。
服务器初始化: 调用Tcpserver对象的init函数,创建TCP套接字并绑定端口。
服务器启动: 调用Tcpserver对象的start函数,通过循环接受客户端连接请求,并为每个连接创建一个新的线程。
线程入口函数: 使用pthread创建新的线程,每个线程运行Tcpserver类中的run静态成员函数,该函数作为线程的入口函数。
服务函数run函数调用Tcpserver类的service函数,处理与客户端的具体通信过程,包括接收客户端数据、发送回复等。

  1. TCP客户端

代码结构

main 函数: 作为程序的入口,从命令行参数获取服务器的IP地址和端口号,创建TCP客户端套接字,并通过循环不断尝试连接服务器。
连接服务器: 在循环中,通过connect函数尝试连接到指定的服务器。若连接失败,则等待3秒后重新尝试连接。
用户输入与通信: 连接成功后,进入另一个循环,用户可以输入待发送的数据,程序将数据发送到服务器,并等待服务器的回复。
数据传输: 使用write函数向服务器发送数据,使用read函数读取服务器返回的数据

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用Lombok @Data 出现java: 找不到符号 的问题

第一种&#xff1a;pom依赖最好如下方式 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>RELEASE</version><scope>compile</scope> </dependency>第二种&#xff1…

C#实用开发(14)--高清晰度字体和窗体分辨率问题。

新建winform程序是&#xff0c;又是会感觉到字体清晰度不够高。还有一种现象就是分辨率的问题&#xff0c;我们平常在自己的电脑开发是用125百分比的分辨率&#xff0c;实际部署的工控机是100&#xff0c;这就会导致分辨率不一致的问题。 可以通过新建应用程序清单&#xff0c;…

Android 广播的基本概念

一.广播简介 Broadcast是安卓四大组件之一。安卓为了方便进行系统级别的消息通知&#xff0c;引入了一套广播消息机制。打个比方&#xff0c;记得原来在上课的时候&#xff0c;每个班级的教室里都会装有一个喇叭&#xff0c;这些喇叭都是接入到学校的广播室的&#xff0c;一旦…

软件推荐:电脑端和手机端做现货白银交易用什么软件?

现在进行现货白银投资&#xff0c;我们不需要到线下的营业厅。在信息时代&#xff0c;一台电脑甚至是移动设备&#xff0c;如手机或者平板电脑等&#xff0c;就可以完成现货白银交易。不过在电脑或者移动设备上完成交易&#xff0c;我们需要现货白银交易软件。下面我们就来讨论…

2024牛客寒假集训营4 -- H数三角形(hard) 题解

目录 H数三角形&#xff08;hard&#xff09; 题目大意&#xff1a; 思路解析&#xff1a; ​编辑 代码实现&#xff1a; H数三角形&#xff08;hard&#xff09; 题目大意&#xff1a; 思路解析&#xff1a; 通过这张图可以发现&#xff0c;左腰和右腰是对称的&#xff0…

基于PID-bang-bang控制算法的卫星姿态控制matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于PID-bang-bang控制算法的卫星姿态控制。仿真输出控制器的控制收敛曲线&#xff0c;卫星姿态调整过程的动画。 2.系统仿真结果 3.核心程序与模型 版本&#xff1a;MATLAB…

【数学建模规则】2024年第九届数维杯大学生数学建模挑战赛参赛指南

一、竞赛介绍 数维杯大学生数学建模挑战赛每年分为两场&#xff0c;每年上半年为数维杯国赛&#xff08;5月&#xff0c;俗称小国赛&#xff09;&#xff0c;下半年为数维杯国际赛(11月)&#xff0c;2023年第八届数维杯大学生数学建模挑战赛共有近1.4万名学生参赛&#xff0c;…

Google宣布暂停其AI工具“Gemini”生成人物图像的功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

下载 axios.js 文件到本地【linux】

方式一 npm install axios在$NODE_PATH/node_modules/axios/dist路径下即可找到axios.js。 方式二 1、百度搜索 GitHub 官网&#xff1a;https://github.com/ 2、搜索 axios 3、点击 axios/axios 4、下载到本地 5、解压&#xff0c;进入到 dist 文件夹** 参考&#x…

【UI自动化】使用poco框架进行元素唯一定位

直接选择&#xff1a; 1.poco(text买入).click() 2.poco("android.widget.ImageView").click()相对选择、空间选择&#xff1a; 3.poco(text/name).parent().child()[0].click()正则表达式&#xff1a; 4.listpoco(textMatches".*ETF")今天主要想记录下…

什么是SSD型云服务器?

​  SSD云服务器是一种使用固态硬盘代替传统HDD进行存储的虚拟机。SDD 使用闪存单元来存储数据&#xff0c;与云计算技术相结合&#xff0c;形成强大且高效的存储解决方案&#xff0c;可以随时随地访问。 SSD云服务器如何工作? SSD云服务器是利用虚拟化和云计算技术创建的。…

使用Postman和JMeter进行signature签名

一、前言 ​ 有些接口的请求会带上sign&#xff08;签名&#xff09;进行请求&#xff0c;各接口对sign的签名内容、方式可能不一样&#xff0c;但一般都是从接口的入参中选择部分内容组成一个字符串&#xff0c;然后再进行签名操作, 将结果赋值给sign; 完整规范的接口文档都会…

【Vuforia+Unity】AR06-空间环境识别功能(AreaTargets)

Vuforia原理&#xff1a;把被识别的物体转成图、立体图、柱形图&#xff0c;3D模型、环境模型&#xff0c;然后模型生成Vuforia数据库-导入Unity-参考模型位置开始摆放数字内容&#xff0c;然后参考模型自动隐藏-发布APP-识别生活中实物-数字内容叠加上去&#xff01; 不论你是…

【leetcode热题】填充每个节点的下一个右侧节点指针

给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右侧节点。如果找不到…

【Qt学习】QPushButton添加图标 并通过快捷键控制该图标

文章目录 1. 介绍2. 操作3. 相关资源文件 1. 介绍 我们知道&#xff1a;QPushButton表示一个按钮&#xff0c;用于响应用户的点击事件。QPushButton可以显示文本、图标或同时显示两者&#xff0c;也可以设置按钮的样式和状态。 我们利用这点 实现一个简单的功能&#xff1a;用…

C#学习总结

1、访问权限 方法默认访问修饰符&#xff1a;private 类默认访问修饰符&#xff1a;internal 类的成员默认访问修饰符&#xff1a;private 2、UserControl的使用 首先添加用户控件 使用时一种是通过代码添加&#xff0c;一种是通过拖动组件到xaml中

【C++】类和对象---友元,内部类,匿名对象详解

目录 友元 友元函数 友元类 内部类 匿名对象 ⭐友元 友元提供了一种突破封装的方式&#xff0c;有时提供了便利。但是友元会增加耦合度&#xff0c;破坏了封装&#xff0c;所以 友元不宜多用。 友元分为&#xff1a;友元函数和友元类。 ⚡友元函数 先看一个问题&#x…

IntelliJ IDEA 创建Spring Boot 项目整合jdbc详细步骤

IntelliJ IDEA 创建Spring Boot 项目&整合jdbc详细步骤 1、打开 IntelliJ IDEA 软件2、使用 "Spring Initializr" 作为项目类型&#xff0c;新建项目工程3、选择对应的SpringBoot版本和依赖4、Spring Boot 项目的结构5、创建一个TestController&#xff0c;并运行…

Opencv实战(2)绘图与图像操作

Opencv实战(2)绘图与图像操作 指路前文&#xff1a;Opencv实战(1)读取与像素操作 三、基本绘图 文章目录 Opencv实战(2)绘图与图像操作三、基本绘图(1).line(2).rectangle(3).circle 四、图像处理(1).颜色空间1.意义2.cvtColor()3.inRange()4.适应光线 (2).形态操作1.腐蚀2.膨…

Spring中的ApplicationContext.publishEvent

简单理解 其实就是监听处理。比如找工作平台上&#xff0c;雇主 employer 发布自己的雇佣条件&#xff0c;目的是平台中有符合条件的求职者时&#xff0c;及时向雇主推荐。求职者发布简历&#xff0c;当平台发现某个求职者比较符合条件&#xff0c;就触发被动&#xff0c;推荐…