网络编程 TCP/UDP通信

news2024/10/6 0:27:03

网络编程 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://www.coloradmin.cn/o/1466891.html

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

相关文章

Linux:ACL权限,特殊位和隐藏属性

目录 一.什么是ACL 二.操作步骤 ① 添加测试目录、用户、组,并将用户添加到组 ② 修改目录的所有者和所属组 ③ 设定权限 ④ 为临时用户分配权限 ⑤ 验证acl权限 ⑥ 控制组的acl权限 三. 删除ACL权限 一.什么是ACL 访问控制列表 (Access Control List):ACL 通…

面试经典150题——快乐数

​"Success is not final, failure is not fatal: It is the courage to continue that counts." - Winston Churchill 1. 题目描述 2. 题目分析与解析 2.1 思路一 还是最简单的,模拟最直观的思路,就是进行一个while循环。比如:…

Unity资源加密解决方案

据统计,全球范围内超过50%的游戏均使用Unity创作而成,作为游戏开发市场第一大游戏引擎占有者,Unity已经全面覆盖到各个游戏平台。 全球游戏引擎市场占有率 由于体量庞大,Unity游戏已成为受游戏黑灰产攻击的重灾区,因游…

rider 缺少iisexpress

File C:/Program Files (x86)/IIS Express/iisexpress.exe doesn’t exist iisexpress下载 64位系统只能安装64位,32位系统安装32位 安装完成之后就有了

【Java程序设计】【C00284】基于Springboot的校园疫情防控管理系统(有论文)

基于Springboot的校园疫情防控管理系统(有论文) 项目简介项目获取开发环境项目技术运行截图 项目简介 这是一个基于Springboot的校园疫情防控系统 本系统分为系统功能模块、管理员功能模块以及学生功能模块。 系统功能模块:在系统首页可以查…

【无刷电机学习】各种电机优势比较

目录 0 参考出处 1 有刷与无刷比较 2 交流与直流比较 3 内转子与外转子比较 4 Delta型与Y型定子绕向比较 5 低压BLDC的一些优点 0 参考出处 【仅作自学记录,不出于任何商业目的。如有侵权,请联系删除,谢谢!】 维基百科…

个人简历补充

个人简历补充 1.对工作的认识2.八股文和知识面3.框架/架构角度深扒3.1 前端3.1.1 mPaaS(移动领域)3.1.2 普通前端项目框架3.1.3 微前端 3.2 后端 持续更新 1.对工作的认识 2.八股文和知识面 前端(基础知识 / 开发能力 / 总结输出能力&#xf…

易宝OA DownloadFile 任意文件读取漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA系统DownloadFile接口处存在任意文件读取漏洞,未授权的攻击者可以利用此漏洞…

knife4j springboot3使用

简介 在日常开发中,写接口文档是我们必不可少的,而Knife4j就是一个接口文档工具,可以看作是Swagger的升级版,但是界面比Swagger更好看,功能更丰富 使用 我使用的是springboot3.2.3 knife4j 4.3.0,knife4j 4.4版本有…

Windows 远程控制 Mac 电脑怎么操作

要从 Windows 远程控制 Mac 电脑,您可以使用内置 macOS 功能或第三方软件解决方案。以下是一些方法: 一、使用内置 macOS 功能(屏幕共享) 1、在 macOS 上启用屏幕共享 转至系统偏好设置 > 共享;选中“屏幕共享”…

Linux--自定义shell

shell shell就是操作系统提供给用户与操作系统进行交互的命令行界面。它可以理解为一个用户与操作系统之间的接口,用户可以通过输入命令来执行各种操作,如文件管理、进程控制、软件安装等。Shell还可以通过脚本编程实现自动化任务。 常见的Unix系统中使…

Vue2页面转化为Vue3

vue2element-ui转化为Vue3element plus 后台管理系统&#xff1a;增删查改 vue2页面&#xff1a; <template><div class"app-container"><div><el-form:model"queryParams"ref"queryForm"size"small":inline&qu…

小程序画布(二维地图线)

首先开始是想用小程序兼容openlayers的&#xff0c;但是了解到用不了&#xff0c;那就用画布来解决 实际效果如下 wxml中代码 <canvas id"trackDesignCanvas" //指定 id 的 Canvas 组件class"orbit-canvas-main" type"2d" …

西门子200SMART SB AE01的正确用法

西门子200SMART SB AE01&#xff0c;就是1路模拟量输入的SB板。信号板直接安装在 SR/ST CPU 本体正面&#xff0c;无需占用电控柜空间&#xff0c;安装、拆卸方便快捷。有些小型的系统如果只有1路模拟量输入&#xff0c;或者模块配置中恰好缺少1路模拟量输入&#xff0c;就可以…

幻兽帕鲁(Palworld 1.4.1)私有服务器搭建(docker版)

文章目录 说明客户端安装服务器部署1Panel安装和配置docker服务初始化设置设置开机自启动设置镜像加速 游戏服务端部署游戏服务端参数可视化配置 Palworld连接服务器问题总结 说明 服务器硬件要求&#xff1a;Linux系统/Window系统&#xff08;x86架构&#xff0c;armbian架构…

C++奇怪的 ::template

答疑解惑 怎么会有::template的写法 起初 在阅读stl的源码的时候&#xff0c;发现了一条诡异的代码 // ALIAS TEMPLATE _Rebind_alloc_t template<class _Alloc,class _Value_type> using _Rebind_alloc_t typename allocator_traits<_Alloc>::template rebind…

【视频编码\VVC】环路滤波基础知识

本文为新一代通用视频编码H.266\VVC原理、标准与实现的简化笔记。 定义&#xff1a;在视频编码过程中进行滤波&#xff0c;滤波后的图像用于后续编码。 目的&#xff1a;1、提升编码图像的质量。2、为后续编码图像提供高质量参考&#xff0c;获得更好的预测效果。 VVC中主要…

C语言-数组指针与指针数组

一、简介 对于使用C语言开发的人来说&#xff0c;指针&#xff0c;大家都是非常熟悉的。数组&#xff0c;大家也同样熟悉。但是这两个组合到一起的话&#xff0c;很多人就开始蒙圈了。这篇文章&#xff0c;就详细的介绍一下这两个概念。 指针数组和数组指针&#xff0c;听起来非…

Stable Diffusion 模型分享:Realisian(现实、亚洲人)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 Realisian 是由多个模型合并而来&#xff0c;是一个现实模型&#xff0c;可以绘制美丽的亚…