当前位置: 首页 > news >正文

Linux网络通信基础API

这篇文章只有Linux网络通信基础API大参数信息,和返回值,这篇文章并没有这些基础API的参数类型介绍。accept的第二个参数可以查看客户端信息。

创建socket

       #include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int socket(int domain, int type, int protocol);

该函数可以创建一个socket;

参数:

domain:告诉系统使用那个底层协议。对TCP/IP协议族而言,该参数应该设置为PF_INET(用于IPv4)或PF_INET6(用于IPv6);对于UNIX本地协议族而言,应设为PF_UNIX。

type:指定服务类型。主要有SOCK_STREAM服务(流服务)TCPSOCK_UGRAM(数据报)服务UDP并且高版本Linux,支持SOCK_NONBLOCK和SOCK_CLOEXEC分别表示将新创建的socket设为非阻塞,以及用fork调用创建子进程时在子进程内部关闭该socket

protocol:几乎所有情况都将其设置为0,表示使用默认协议。

返回值:

        socket系统调用成功返回一个socket文件描述符,失败返回-1并设置errno。

命名socket(绑定)

        创建socket时,只给它指定了地址族,但并未指定使用该地址族中的哪个具体socket地址

        将一个socket与socket地址绑定成为给socket命名,因为只有命名后,客户端才知道该如何连接它。客户端通常不需要命名socket,都是匿名方式,即操作系统自动分配socket地址。

命名socket的系统调用
 

       #include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

参数:

sockfd:就是socket()创建的文件描述符

addr:bind将addr所指的socket地址分配给未命名的sockfd文件描述符

addrlen:指socket地址长度

返回值: 

        成功返回0,失败返回-1并设置errno。常见的两种错误,EACCES和EADDRINUSE

        EACCES:被绑定的地址是保护地址,仅由超级用户可以访问。比如端口号(0~1023).

        EADDRINUSE:被绑定的地址正在使用。比如将socket绑定到一个处于TIME_WAIT状态的socket地址。

监听socket

        socket被命名之后,还不能马上接收客户连接,我们需要如下系统调用来创建一个监听队列,以存放待处理的客户连接。

       #include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int listen(int sockfd, int backlog);

 参数:

sockfd:指定被监听的socket。

backlog:提示内核监听队列的最大长度,监听队列如果超过backlog,服务器将不受理新的客户连接,客户端也将收到ECONNREFUSED错误信息。在内核版本2.2之后,只表示处于完全连接状态的socket的上限,半连接状态则由内核参数定义。典型值为5.

返回值:

        成功返回0,失败返回-1并设置errno。 

接受socket

       #include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

从listen监听队列中接受一个连接。

参数:

sockfd:执行过listen系统调用的监听队列socket。

 addr用来获取被接受连接的远端socket地址,如客户端连接,服务端接受,就可以通过这个参数获取。

addrlen:指定socket地址长度。

返回值:

        成功返回一个新的socket连接,该socket唯一标识了被接受的这个连接,服务端可通过读写socket来与被接受连接的客户端进行通信。失败返回-1并设置errno。

发起socket

       #include <sys/types.h>          /* See NOTES */#include <sys/socket.h>int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);

客户端主动与服务器建立连接。

参数:

sockfd:参数socket()创建的文件描述符。

addr:是服务器监听的socket地址

addrlen:指定地址长度

返回值:

        成功返回0,一旦成功建立连接,socket就唯一地标识了这个连接,客户端就可以通过sockfd来与服务端通信。失败返回-1,并设置errno。常见的两个错误:ECONNREFUSED和ETIMEDOUT。

         ECONNREFUSED:目标端口不存在,连接被拒绝。

        ETIMEDOUT:连接超时。

关闭socket

       #include <unistd.h>int close(int fd);

        参数fd是待关闭状态,close系统调用并非总是立即关闭一个连接,而是通过fd引用计数减一,当fd引用计数减为0,才真正关闭连接多进程,一次fork()将父进程中代开的socket的引用计数加1,因此我们必须在父子进程中都进行关闭,才能真正关闭。 

相关文章:

Linux网络通信基础API

这篇文章只有Linux网络通信基础API大参数信息&#xff0c;和返回值&#xff0c;这篇文章并没有这些基础API的参数类型介绍。accept的第二个参数可以查看客户端信息。 创建socket #include <sys/types.h> /* See NOTES */#include <sys/socket.h>int sock…...

Python爬虫:下载4K壁纸

&#x1f381;&#x1f381;创作不易&#xff0c;关注作者不迷路&#x1f380;&#x1f380; 目录 &#x1f338;完整代码 &#x1f338;分析 &#x1f381;基本思路 &#x1f381;需要的库 &#x1f381;提取图片的链接和标题 &#x1f453;寻找Cookie和User-Agent &…...

2024年【北京市安全员-B证】新版试题及北京市安全员-B证免费试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【北京市安全员-B证】新版试题及北京市安全员-B证免费试题&#xff0c;包含北京市安全员-B证新版试题答案和解析及北京市安全员-B证免费试题练习。安全生产模拟考试一点通结合国家北京市安全员-B证考试最新大纲…...

python爬取B站视频实验

实验17&#xff1a;爬虫2 文章目录 实验17&#xff1a;爬虫21.实验目标及要求2. 实验主要内容3.实验小结 1.实验目标及要求 &#xff08;1&#xff09;掌握有关爬虫的包 &#xff08;2&#xff09;掌握爬虫方法 &#xff08;3&#xff09;爬取B站卡塔尔世界杯若干视频 2. 实验…...

10步搞定Python爬虫从零到精通!

学习Python网络爬虫可以分为以下几个步骤&#xff0c;每一步都包括必要的细节和示例代码&#xff0c;以帮助你从零开始掌握这一技能。 第一步&#xff1a;理解网络爬虫基础 什么是网络爬虫&#xff1f; 网络爬虫是一种自动化程序,用来从互联网上收集数据.它通过发送 HTTP 请求…...

SpringMVC学习笔记---带你快速入门和复习

一、初识SpringMVC 1.1、什么是SpringMVC 1.1.1、什么是MVC MVC是一种软件架构模式&#xff08;是一种软件架构设计思想&#xff0c;不止Java开发中用到&#xff0c;其它语言也需要用到&#xff09;&#xff0c;它将应用分为三块&#xff1a; M&#xff1a;Model&#xff0…...

Linux系统编程 day09 线程同步

Linux系统编程 day09 线程同步 1.互斥锁2.死锁3.读写锁4.条件变量&#xff08;生产者消费者模型&#xff09;5.信号量 1.互斥锁 互斥锁是一种同步机制&#xff0c;用于控制多个线程对共享资源的访问&#xff0c;确保在同一时间只有一个线程可以访问特定的资源或执行特定的操作…...

Vue快速入门(四)——Vue3及组合式API(一)

文章目录 一、认识Vue31. Vue2 选项式 API vs Vue3 组合式API2. Vue3的优势二、使用create-vue搭建Vue3项目1、认识create-vue2. 使用create-vue创建项目三、组合式API - setup选项1. setup选项的写法和执行时机2. setup中写代码的特点3. `<script setup>`语法糖4.小结四…...

vue项目名修改、webstorm和idea创建的项目重命名、重构项目、修改项目名称

一、需求 就是创建了一个项目&#xff0c;后期需要重命名&#xff0c;怎么办&#xff1f;----> 直接修改&#xff1f;肯定不行&#xff0c;因为里面有些配置也需要修改&#xff0c;假如你只改文件夹名称的话&#xff0c;里面配置都没修改&#xff0c;后期可能会出问题。 二…...

【MySQL】数据库约束和多表查询

目录 1.前言 2.数据库约束 2.1约束类型 2.2 NULL约束 2.3 NUIQUE&#xff1a;唯一约束 2.4 DEFAULT&#xff1a;默认值约束 2.5 PRIMARY KEY&#xff1a;主键约束 2.6 FOREIGN KEY&#xff1a;外键约束 1.7 CHECK约束 3.表的设计 3.1一对一 3.2一对多 3.3多对多 …...

抖店飞鸽客服自动回复软件开发教程与下载体验(.NET版)

转载请注明出处&#xff01; 原文链接&#xff1a;https://blog.csdn.net/zgyulongfei/article/details/140960430 本文适合的读者为&#xff1a; 抖店&#xff08;抖音小店&#xff09;个体商家&#xff1b;抖店店群商家&#xff08;店群商家&#xff1a;指的是开了几十个抖…...

如何关闭redis的自动清理缓存,声明式事务(含有redis)如何解决,redis setnx锁的使用。

20240809 一、解决redis数据被删除的方案1、发现问题2、解决注意&#xff01;&#xff01; 二、声明式事务&#xff08;当有redis的时候&#xff09;1. 先看代码2. Transactional(rollbackFor Exception.class)3. 如何解决redis在事务里面&#xff0c;如何保证原子性和一致性3…...

C#中抽象类的使用

前言 我们在C#中使用抽象类可以发挥C#多态的功能&#xff0c;把具有共性的方法定义在抽象类中&#xff0c;然后在不同的类中去实现&#xff0c;可增强代码的可读性、扩展性。 1、不使用抽象类 我们定义了下面两个类XiaoWang、XiaoMing&#xff0c;他们有一个Country方法&…...

揭秘网络攻击:深入理解JavaScript中的跨站点请求伪造(CSRF)

标题&#xff1a;揭秘网络攻击&#xff1a;深入理解JavaScript中的跨站点请求伪造&#xff08;CSRF&#xff09; 在当今数字化时代&#xff0c;网络安全已成为每个开发者和用户必须关注的重点。其中&#xff0c;跨站点请求伪造&#xff08;CSRF&#xff09;是一种常见的网络攻…...

【项目实战】C++视频共享点播系统

目录 一、项目介绍 1.1 对视频共享点播系统的认识 1.2服务端程序负责功能 1.3 服务端功能模块划分 1.4 项目界面演示 1.5预备知识 二.环境搭建 2.1 安装 Jsoncpp 库 2.1.1 使用jsoncpp 2.2 引入httplib库 2.2.1 安装Git&#xff08;如果你的系统尚未安装Git&#xf…...

Android逆向题解 攻防世界难度4- Android2.0

Jeb打开apk 关键代码在Native函数getResult IDA 打开 so 发现代码比较简单&#xff0c;可以直接静态分析。 输出字符串也就是flag 长度是15&#xff0c;然后分成三段&#xff0c;第一段是可以整除3&#xff0c;第二段是除3取余1&#xff0c;第三段是除3取余等于2&#xff1…...

P4155 [SCOI2015] 计划

[SCOI2015] 计划 - 洛谷 核心思路 注意到&#xff0c; 可推出&#xff0c; 表示 战士 走 步到达战士位置。 若可以走到且 r < 终点 则答案 然后再加上自己这个哨兵&#xff0c;和走回自己的一个哨兵即可。 AC 代码 #include<bits/stdc.h> using namespace std…...

今日(2024年8月12日)科技新闻

国内&#xff1a; 航空航天领域 我国成功发射卫星互联网高轨卫星。我国试验性冰川保护项目取得积极成效&#xff0c;被形容为“为冰川盖棉被”。2024西太平洋国际航次科考队起航&#xff0c;开启探秘深海海山之旅。我国首架固定翼海上专业搜救航空器正式列编。“祥云”as700载…...

CP AUTOSAR标准之ECUStateManager(AUTOSAR_SWS_ECUStateManager)(更新中……)

1 简介和功能概述 ECU管理器模块(如本文档中所述)是一个基本软件模块(参见[1]),用于管理ECU状态的常见方面。具体来说,ECU管理器模块: 初始化和取消初始化OS、SchM和BswM以及一些基本软件驱动模块。根据请求配置ECU进入休眠和关机状态。管理ECU上的所有唤醒事件ECU管理器模块…...

Java中的中介者模式:解耦复杂系统的有效策略

Java中的中介者模式&#xff1a;解耦复杂系统的有效策略 在软件开发中&#xff0c;随着系统规模的扩大和复杂度的增加&#xff0c;各组件之间的直接交互会导致代码的耦合性增高&#xff0c;从而影响系统的可维护性和可扩展性。为了应对这种复杂性&#xff0c;中介者模式&#…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

算法打卡第18天

从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder [9,3,15,20,7…...

如何把工业通信协议转换成http websocket

1.现状 工业通信协议多数工作在边缘设备上&#xff0c;比如&#xff1a;PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发&#xff0c;当设备上用的是modbus从站时&#xff0c;采集设备数据需要开发modbus主站&#xff1b;当设备上用的是西门子PN协议时&#xf…...

表单设计器拖拽对象时添加属性

背景&#xff1a;因为项目需要。自写设计器。遇到的坑在此记录 使用的拖拽组件时vuedraggable。下面放上局部示例截图。 坑1。draggable标签在拖拽时可以获取到被拖拽的对象属性定义 要使用 :clone, 而不是clone。我想应该是因为draggable标签比较特。另外在使用**:clone时要将…...

Netty自定义协议解析

目录 自定义协议设计 实现消息解码器 实现消息编码器 自定义消息对象 配置ChannelPipeline Netty提供了强大的编解码器抽象基类,这些基类能够帮助开发者快速实现自定义协议的解析。 自定义协议设计 在实现自定义协议解析之前,需要明确协议的具体格式。例如,一个简单的…...

简约商务通用宣传年终总结12套PPT模版分享

IOS风格企业宣传PPT模版&#xff0c;年终工作总结PPT模版&#xff0c;简约精致扁平化商务通用动画PPT模版&#xff0c;素雅商务PPT模版 简约商务通用宣传年终总结12套PPT模版分享:商务通用年终总结类PPT模版https://pan.quark.cn/s/ece1e252d7df...