TCP编程API

这里写自定义目录标题

  • 主要的 TCP 编程 API 函数
    • 1.1 socket()
    • 1.2 bind()
    • 1.3 listen()
    • 1.4 accept()
    • 1.5 connect()
    • 1.6 send()
    • 1.7 recv()
    • 1.8 close()

在这里插入图片描述

主要的 TCP 编程 API 函数

1.1 socket()

创建一个新的套接字。

int socket(int domain, int type, int protocol);

domain:指定协议族,一般为 AF_INET(IPv4)或 AF_INET6(IPv6)。
AF_INET IPv4 Internet protocols ip(7)
AF_INET6 IPv6 Internet protocols ipv6(7)
AF_UNIX, AF_LOCAL Local communication unix(7)
AF_NETLINK Kernel user interface device netlink(7)
AF_PACKET Low level packet interface packet(7)

type:指定套接字类型,SOCK_STREAM 用于 TCP。
SOCK_STREAM: 流式套接字 唯一对应于TCP
SOCK_DGRAM: 数据报套接字,唯一对应着UDP
SOCK_RAW: 原始套接字

protocol:指定协议,通常为 0,让系统自动选择合适的协议(通常是 TCP)。
返回值:成功返回新创建的套接字描述符,失败返回 -1。

1.2 bind()

将套接字与本地的 IP 地址和端口号进行绑定。

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

sockfd:套接字描述符。
addr:指向 struct sockaddr 类型的地址结构,包含了 IP 地址和端口号信息。

struct sockaddr_in
u_short sin_family // protocol family
u_short sin_port // port number
struct in_addr sin_addr //IP address (32-bits)

addrlen:地址结构的大小。
返回值:成功返回 0,失败返回 -1。

1.3 listen()

将套接字设置为监听模式,准备接受传入的连接请求。

int listen(int sockfd, int backlog);

sockfd:套接字描述符。
backlog:等待连接队列的大小。
返回值:成功返回 0,失败返回 -1。

1.4 accept()

接受客户端的连接请求,返回新的套接字描述符用于与客户端通信。

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

sockfd:服务器端套接字描述符。
addr:指向 struct sockaddr 的指针,用于返回客户端的地址信息。
addrlen:地址结构的大小。
返回值:返回新的套接字描述符,用于与客户端进行数据交换。

1.5 connect()

客户端通过此函数向服务器发起连接请求。

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

sockfd:套接字描述符。
addr:指向服务器地址的结构体。
addrlen:地址结构的大小。
返回值:成功返回 0,失败返回 -1。

1.6 send()

向已连接的套接字发送数据。

ssize_t send(int sockfd, const void *buf, size_t len, int flags);

sockfd:套接字描述符。
buf:发送的数据缓冲区。
len:数据的字节数。
flags:控制标志,通常为 0。
返回值:成功返回发送的字节数,失败返回 -1。

1.7 recv()

从套接字接收数据。

ssize_t recv(int sockfd, void *buf, size_t len, int flags);

sockfd:套接字描述符。
buf:接收数据的缓冲区。
len:缓冲区的大小。
flags:控制标志,通常为 0。
返回值:成功返回接收到的字节数,失败返回 -1,返回 0 表示连接关闭。

1.8 close()

关闭套接字,释放资源。

int close(int sockfd);

sockfd:套接字描述符。
返回值:成功返回 0,失败返回 -1。

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

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

相关文章

STM32WB55RG开发(1)----开发板测试

STM32WB55RG开发----1.开发板测试 概述硬件准备视频教学样品申请源码下载产品特性参考程序生成STM32CUBEMX串口配置LED配置堆栈设置串口重定向主循环演示 概述 STM32WB55 & SENSOR是一款基于STM32WB55系列微控制器的评估套件。该套件采用先进的无线通信技术,支…

人工智能、机器学习与深度学习:层层递进的技术解读

引言 在当今科技快速发展的时代,人工智能(AI)已经成为一个热门话题,几乎渗透到了我们生活的方方面面。从智能手机的语音助手,到自动驾驶汽车,再到医疗诊断中的图像识别,人工智能的应用正在改变我…

【Java学习】电脑基础操作和编程环境配置

CMD 在Windows中用命令行的方式操作计算机。 打开CMD Win R输入CMD按下回车键 Win E 进入我的电脑 常用的CMD命令 盘符名称冒号 说明:盘符切换 举例:E:回车,表示切换到E盘 dir 说明:查看当前路径下的内容 cd目录 说明&a…

学习记录:js算法(八十八):分割回文串

文章目录 分割回文串思路一:回溯法思路二:动态规划方法三:记忆化搜索方法四:迭代法方法五:位运算 分割回文串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串。返回 s 所有可…

FFmpeg —— 通过AES-CTR方式对视频加密解密(详细介绍通过FFmpeg指令、代码方式进行加密解码,附源码)

背景 这里使用ffmpeg通过AES-CTR加密方式对视频进行加密保存、解密播放。 1、纯指令方式(加密解密) 指令方式:对本地mp4文件加密后另存为mp4: # 使用AES-128-CBC算法对视频文件进行加密 ffmpeg -i xx.mp4 -c:v copy -c:a copy -encryption_scheme cenc-aes-ctr

Mac中禁用系统更新

Mac中禁用系统更新 文章目录 Mac中禁用系统更新1. 修改hosts,屏蔽系统更新检测联网1. 去除系统偏好设置--系统更新已有的小红点标记 1. 修改hosts,屏蔽系统更新检测联网 打开终端,执行命令: sudo vim /etc/hosts127.0.0.1 swdis…

Unity3D UI 双击和长按

Unity3D 实现 UI 元素双击和长按功能。 UI 双击和长按 上一篇文章实现了拖拽接口,这篇文章来实现 UI 的双击和长按。 双击 创建脚本 UIDoubleClick.cs,创建一个 Image,并把脚本挂载到它身上。 在脚本中,继承 IPointerClickHa…

sql专题 之 where和join on

文章目录 前言where介绍使用过滤结果集关联两个表 连接外连接内连接自然连接 使用inner join和直接使用where关联两个表的区别总结 前言 从数据库查询数据时,一张表不足以查询到我们想要的数据,更多的时候我们需要联表查询。 联表查询我们一般会使用连接…

LeetCode 热题100之 动态规划1

对于动态规划的问题,解题步骤有以下几部(总结为动态规划五部曲:参考代码随想录动态规划 确定dp数组以及下标的含义;确定递推公式;dp数组如何初始化;确定遍历顺序;举例推导dp数组 下面的解题思路分析都将从…

python可视化将多张图整合到一起(画布)

这周有点事忙着,没时间重温刚结束的Mathurcup数学建模,这两天也是再看了下,论文还是赶紧挺烂的,但比国赛又有进步(说起国赛又不得不抱怨了,基本其余省份都发了,但江西......哎)。哎&…

MFC图形函数学习07——画扇形函数

绘制扇形函数是MFC中绘图的基本函数,它绘制的仍是由椭圆弧与椭圆中心连线构成的椭圆扇形,特例是由圆弧与圆心连线构成的圆扇形。 一、绘制扇形函数 原型:BOOL Pie(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4); …

vue 依赖注入(Provide、Inject )和混入(mixins)

Prop 逐级透传问题​ 通常情况下,当我们需要从父组件向子组件传递数据时,会使用 props。想象一下这样的结构:有一些多层级嵌套的组件,形成了一棵巨大的组件树,而某个深层的子组件需要一个较远的祖先组件中的部分数据。…

c++零基础入门知识点

名字空间(namespace)的引入和使用 名字空间域是随标准C而引入的。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字 //TestMain.cpp //1. 普通的命名空…

手机上用什么方法可以切换ip

手机上用什么方法可以切换IP?在某些特定情境下,用户可能需要切换手机的IP地址,以满足网络安全、隐私保护或绕过地域限制等需求。下面以华为手机为例,将详细介绍手机IP地址切换的几种方法,帮助用户轻松实现这一目标。 一…

全面解析 Python typing模块与静态类型注解:从基础到高级

在现代软件开发中,代码的可读性、维护性和可靠性至关重要。Python 作为一门动态类型语言,尽管灵活,但也可能带来一些类型上的困扰。Python 的 typing 模块和静态类型注解提供了一种在编写代码时明确类型信息的方法,从而提升代码质…

一个强大的Stable Diffusion comfyUI 工作流,能实现写真自由、各种风格融合、面部特征一致性等等

今天,我们将向您介绍一款非常实用的工具——Stable Diffusion comfyUI工作流。这款工作流基于Stable Diffusion技术,旨在为您提供一键式生成图像的便捷体验。无论您是AI绘画的新手还是专业人士,这个工作流都能为您带来极大的便利。 在这个教…

【测试】【Debug】pytest运行后print没有输出

import pytest def test_good():for i in range(1000):print(i)def test_bad():print(this should fail!)assert False比如上述程序,运行之后只能看到输出了’this should fail!;但是debug版的测试运行后又能看到test_good函数中的输出。 这是为什么呢&a…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——6.外泌体基因功能注释(二)

内容如下: 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的相关性分析…

【Homework】【1--4】Learning resources for DQ Robotics in MATLAB

Learning resources for DQ Robotics in MATLAB Lesson 1 代码 % Step 2: Define the real numbers a1 and a2 a1 123; a2 321;% Step 3: Calculate and display a3 a1 a2 a3 a1 a2; disp([a3 (a1 a2) , num2str(a3)])% Step 4: Calculate and display a3 a1 * a2 a3…

ORACLE RAC用DNS服务器的配置

一、搭建本地YUM源 二、安装DNS全部组建 yum -y install bind* 三、规划您RAC集群所有IP #public 192.168.16.111 rac1.ntt.com rac1 192.168.16.112 rac2.ntt.com rac2 192.168.16.121 rac3.ntt.com rac3 192.168.16.122 rac4.ntt.com rac4 #private 10.10.10.111 rac1-pr…