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服务(流服务)TCP和SOCK_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大参数信息,和返回值,这篇文章并没有这些基础API的参数类型介绍。accept的第二个参数可以查看客户端信息。 创建socket #include <sys/types.h> /* See NOTES */#include <sys/socket.h>int sock…...
Python爬虫:下载4K壁纸
🎁🎁创作不易,关注作者不迷路🎀🎀 目录 🌸完整代码 🌸分析 🎁基本思路 🎁需要的库 🎁提取图片的链接和标题 👓寻找Cookie和User-Agent &…...
2024年【北京市安全员-B证】新版试题及北京市安全员-B证免费试题
题库来源:安全生产模拟考试一点通公众号小程序 2024年【北京市安全员-B证】新版试题及北京市安全员-B证免费试题,包含北京市安全员-B证新版试题答案和解析及北京市安全员-B证免费试题练习。安全生产模拟考试一点通结合国家北京市安全员-B证考试最新大纲…...
python爬取B站视频实验
实验17:爬虫2 文章目录 实验17:爬虫21.实验目标及要求2. 实验主要内容3.实验小结 1.实验目标及要求 (1)掌握有关爬虫的包 (2)掌握爬虫方法 (3)爬取B站卡塔尔世界杯若干视频 2. 实验…...
10步搞定Python爬虫从零到精通!
学习Python网络爬虫可以分为以下几个步骤,每一步都包括必要的细节和示例代码,以帮助你从零开始掌握这一技能。 第一步:理解网络爬虫基础 什么是网络爬虫? 网络爬虫是一种自动化程序,用来从互联网上收集数据.它通过发送 HTTP 请求…...
SpringMVC学习笔记---带你快速入门和复习
一、初识SpringMVC 1.1、什么是SpringMVC 1.1.1、什么是MVC MVC是一种软件架构模式(是一种软件架构设计思想,不止Java开发中用到,其它语言也需要用到),它将应用分为三块: M:Model࿰…...
Linux系统编程 day09 线程同步
Linux系统编程 day09 线程同步 1.互斥锁2.死锁3.读写锁4.条件变量(生产者消费者模型)5.信号量 1.互斥锁 互斥锁是一种同步机制,用于控制多个线程对共享资源的访问,确保在同一时间只有一个线程可以访问特定的资源或执行特定的操作…...
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创建的项目重命名、重构项目、修改项目名称
一、需求 就是创建了一个项目,后期需要重命名,怎么办?----> 直接修改?肯定不行,因为里面有些配置也需要修改,假如你只改文件夹名称的话,里面配置都没修改,后期可能会出问题。 二…...
【MySQL】数据库约束和多表查询
目录 1.前言 2.数据库约束 2.1约束类型 2.2 NULL约束 2.3 NUIQUE:唯一约束 2.4 DEFAULT:默认值约束 2.5 PRIMARY KEY:主键约束 2.6 FOREIGN KEY:外键约束 1.7 CHECK约束 3.表的设计 3.1一对一 3.2一对多 3.3多对多 …...
抖店飞鸽客服自动回复软件开发教程与下载体验(.NET版)
转载请注明出处! 原文链接:https://blog.csdn.net/zgyulongfei/article/details/140960430 本文适合的读者为: 抖店(抖音小店)个体商家;抖店店群商家(店群商家:指的是开了几十个抖…...
如何关闭redis的自动清理缓存,声明式事务(含有redis)如何解决,redis setnx锁的使用。
20240809 一、解决redis数据被删除的方案1、发现问题2、解决注意!! 二、声明式事务(当有redis的时候)1. 先看代码2. Transactional(rollbackFor Exception.class)3. 如何解决redis在事务里面,如何保证原子性和一致性3…...
C#中抽象类的使用
前言 我们在C#中使用抽象类可以发挥C#多态的功能,把具有共性的方法定义在抽象类中,然后在不同的类中去实现,可增强代码的可读性、扩展性。 1、不使用抽象类 我们定义了下面两个类XiaoWang、XiaoMing,他们有一个Country方法&…...
揭秘网络攻击:深入理解JavaScript中的跨站点请求伪造(CSRF)
标题:揭秘网络攻击:深入理解JavaScript中的跨站点请求伪造(CSRF) 在当今数字化时代,网络安全已成为每个开发者和用户必须关注的重点。其中,跨站点请求伪造(CSRF)是一种常见的网络攻…...
【项目实战】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(如果你的系统尚未安装Git…...
Android逆向题解 攻防世界难度4- Android2.0
Jeb打开apk 关键代码在Native函数getResult IDA 打开 so 发现代码比较简单,可以直接静态分析。 输出字符串也就是flag 长度是15,然后分成三段,第一段是可以整除3,第二段是除3取余1,第三段是除3取余等于2࿱…...
P4155 [SCOI2015] 计划
[SCOI2015] 计划 - 洛谷 核心思路 注意到, 可推出, 表示 战士 走 步到达战士位置。 若可以走到且 r < 终点 则答案 然后再加上自己这个哨兵,和走回自己的一个哨兵即可。 AC 代码 #include<bits/stdc.h> using namespace std…...
今日(2024年8月12日)科技新闻
国内: 航空航天领域 我国成功发射卫星互联网高轨卫星。我国试验性冰川保护项目取得积极成效,被形容为“为冰川盖棉被”。2024西太平洋国际航次科考队起航,开启探秘深海海山之旅。我国首架固定翼海上专业搜救航空器正式列编。“祥云”as700载…...
CP AUTOSAR标准之ECUStateManager(AUTOSAR_SWS_ECUStateManager)(更新中……)
1 简介和功能概述 ECU管理器模块(如本文档中所述)是一个基本软件模块(参见[1]),用于管理ECU状态的常见方面。具体来说,ECU管理器模块: 初始化和取消初始化OS、SchM和BswM以及一些基本软件驱动模块。根据请求配置ECU进入休眠和关机状态。管理ECU上的所有唤醒事件ECU管理器模块…...
Java中的中介者模式:解耦复杂系统的有效策略
Java中的中介者模式:解耦复杂系统的有效策略 在软件开发中,随着系统规模的扩大和复杂度的增加,各组件之间的直接交互会导致代码的耦合性增高,从而影响系统的可维护性和可扩展性。为了应对这种复杂性,中介者模式&#…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法
深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Mac软件卸载指南,简单易懂!
刚和Adobe分手,它却总在Library里给你写"回忆录"?卸载的Final Cut Pro像电子幽灵般阴魂不散?总是会有残留文件,别慌!这份Mac软件卸载指南,将用最硬核的方式教你"数字分手术"࿰…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
协议转换利器,profinet转ethercat网关的两大派系,各有千秋
随着工业以太网的发展,其高效、便捷、协议开放、易于冗余等诸多优点,被越来越多的工业现场所采用。西门子SIMATIC S7-1200/1500系列PLC集成有Profinet接口,具有实时性、开放性,使用TCP/IP和IT标准,符合基于工业以太网的…...
