网络编程客户端和服务端连接流程

服务器端:socket()-->bind( )-->listen()-->accept()-->read()/write()--->close()socket()//创建套接字
bind()//命名socket,分配套接字地址
listen()//监听状态,等待连接请求状态
accept()//允许连接(被动连接)
read()/write()或者send()/recv() //进行数据交换
close()//断开连接
客户端: socket()-->connect()-->read()/write()-->close()socket()//创建套接字
connect()//请求连接
read()/write() send()/recv()//进行数据交换
close()//断开连接

 对于服务端,创建socket后需要分配其地址,调用bind函数

#include <sys/types.h> 					
#include <sys/socket.h>
bind(socket,(struct sockaddr*)addr,socklen_t addrlen)
//该函数参数为需要命名的socket,socket地址和该地址的长度。addr的IP为自己主机的IP地址//返回值  成功0失败 -1并设置erron

而对于客户端,socket地址是匿名分配的,不需要自己来分配,只需要用connect函数来请求连接,该连接为主动连接。

#include <sys/types.h> 					
#include <sys/socket.h>
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);参数:
第一个参数:int sockdf:socket文件描述符
第二个参数: const struct sockaddr *addr:传入参数,指定服务器端地址信息,含IP地址和端口号
第三个参数:socklen_t addrlen:传入参数,传入sizeof(addr)大小
返回值:成功: 0失败:-1,设置errno

客户端发送connect()连接请求后,并不意味着服务端执行accept后才接收连接,因此connect()返回后不代表进行数据交换。客户端的连接请求首先会存放到listne创建的监听队列中,而accept只是从监听队列中取出连接,不关心连接处于何种状态(比如ESTABLISHED和CLOSE_WAIT),更不关心网络状态的变化。

#include<sys/socket.h>
int listen(int sockfd,int backlog);//参数1: 表示进入监听的命名后的socket
//参数2: 表示内核监听队列最大长度,linux2.2后表示完全连接状态的最大上限//返回:
// 成功:0
// 失败:-1 设置erron
#include<sys/types.h>
#include<sys/socket.h>
int accept(int sockfd,struct sockaddr*addr,socklen_t*addrlen);//参数1: 执行过listen系统调用的监听socket//参数2 :客户端的socket地址(自动分配)//参数3: 客户端的socket地址长度//返回值  
// 成功: 0
//失败 : -1 设置erron

 

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

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

相关文章

java第二十九课 —— 断点 | 零钱通项目

断点调试&#xff08;debug&#xff09; 实际需求 在开发中&#xff0c;新手程序员在查找错误时&#xff0c;这时老程序员就会温馨提示&#xff0c;可以用断点调试步一步的看源码执行的过程&#xff0c;从而发现错误所在。 重要提示&#xff1a;在断点调试过程中&#xff0c;…

Open3D(C++) 删除点云中重复的点

目录 一、算法原理1、重叠点2、主要函数二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 1、重叠点 原始点云克隆一份   构造重叠区域   合并点云获得重叠点 2、主要…

嫦娥六号平安回家,Smartbi非常荣幸参与中国航天项目

“小时不识月&#xff0c;呼作白玉盘。”李白的这句诗&#xff0c;承载了古人对月亮的美好想象与纯真童趣。今天&#xff0c;当我们仰望夜空&#xff0c;那轮明月不仅是诗词中的意象&#xff0c;更是科学探索的目标和梦想的寄托。 2024年6月25日14时07分&#xff0c;嫦娥六号返…

vxeTable反转表格

文章目录 前言 前言 如果遇到列为动态值&#xff0c;行相对固定的情况&#xff0c;这种时候就需要用到行列反转&#xff0c;这里我以vxeTable表格为例。 直接上代码 <vxe-gridref"tableRefRight":auto-resize"true":columns"dataColumn":dat…

数独的解法

文后附有源代码下载地址&#xff0c;大家有更好的算法&#xff0c;可以发上来交流下。 主要是数学方面的算法改进&#xff0c;所以大家务必基于单线程&#xff0c;不要搞多线程&#xff0c;对于数学改进&#xff0c;单线程变多线程没有意义。 编译环境&#xff1a;vs2022&…

ubuntu22.04 编译安装openssl C++ library

#--------------------------------------------------------------------------- # openssl C library # https://www.openssl.org/source/index.html #--------------------------------------------------------------------------- cd /opt/download # 下载openssl-3.0.13…

概率论中:二项分布和泊松分布有什么区别

二项分布和泊松分布都是概率论中常见的离散概率分布&#xff0c;但它们之间存在显著的区别。以下是它们之间的主要区别&#xff0c;以清晰、分点的方式表示并归纳&#xff1a; 1. 定义与描述 二项分布&#xff1a;描述的是在n次独立的伯努利试验中成功的次数。每次试验只有两…

第5章_Modbus通讯协议

文章目录 5.1 学习Modbus的快速方法5.1.1 寄存器速记5.1.2 协议速记 5.2 初识Modbus5.2.1 背景5.2.2 什么是Modbus&#xff1f;1. Modbus简介2. Modbus特点3. Modbus常用术语4. Modbus事务处理 5.3 Modbus软件与使用5.3.1 Modbus软件简介5.3.2 Modbus Poll&#xff08;主站设备…

原生小程序使用数据图表

这里以使用ucharts为例 第一步&#xff1a;在已创建好的小程序项目根目录下执行npm init来初始化项目 第二步&#xff1a;安装所需的包 npm i qiun/wx-ucharts 第三步&#xff1a;构建&#xff1a;在小程序开发工具中&#xff0c;点击工具->构建npm即可 此时会看见项目目录中…

Unity WebGL项目问题记录

一、资源优化 可通过转换工具配套提供的资源优化工具&#xff0c;将游戏内纹理资源针对webgl导出做优化。 工具入口&#xff1a; 工具介绍 Texture 搜索规则介绍 已开启MipMap: 搜索已开启了MipMap的纹理。 NPOT: 搜索非POT图片。 isReadable: 搜索已开启readable纹理。 …

一分钟上手!用 Video GPT 一天制作上百条短视频

一分钟上手&#xff01;用 Video GPT 一天制作上百条短视频 学会简单烹饪&#xff0c;享受美味家常菜 Video GPT by VEED 使用链接&#xff1a; https://chatgpt-plus.top/g/g-Hkqnd7mFT-video-gpt-by-veed 1. 选择视频主题 在开始之前&#xff0c;确定视频的主题和目标受众…

代码随想三刷贪心篇5

代码随想三刷贪心篇5 738. 单调递增的数字题目代码968. 监控二叉树题目代码738. 单调递增的数字 题目 链接 代码 class Solution {public int monotoneIncreasingDigits(int n) {char[] arr = String.valueOf

深度之眼(二十八)——神经网络基础知识(三)-卷积神经网络

文章目录 一、前言二、卷积操作2.1 填充&#xff08;padding&#xff09;2.2 步长2.3 输出特征图尺寸计算2.4 多通道卷积 三、池化操作四、Lenet-5及CNN结构进化史4.1 Lenet-5 一、前言 卷积神经网络–AlexNet(最牛)-2012 Lenet-5-大规模商用&#xff08;1989&#xff09; 二、…

网络编程:使用udp实现数据文件的接收java

目录 1、需求 2、逻辑实现 3、代码实现 4、总结 1、需求 发送方将文件按照数据帧进行发送&#xff0c;接收方完成数据接收的还原&#xff0c;即还原为相应的文件。 2、逻辑实现 采用ConcrrenutHashMap作为缓冲区&#xff0c;每次处理时都判断&#xff0c;数据是否连续&…

昇思25天学习打卡营第3天|网络构建

学习目标&#xff1a;熟练掌握网络构建方法 了解mindspore.nn 实例构建简单的神经网络 网络模型中各层参数 昇思大模型平台 AI实验室 学习记录&#xff1a; 一、关于mindspore.nn 在MindSpore中&#xff0c;Cell类是构建所有网络的基类&#xff0c;也是网络的基本单元。cell…

在CentOS 7 64位 Docker容器里面部署mysql数据库定时备份和还原步骤

备份 案例&#xff1a;在CentOS 7系统内的Docker容器中设置一个定时任务&#xff0c;每周五备份MySQL数据库&#xff0c;可以通过以下步骤实现&#xff1a; 1、创建备份脚本 首先&#xff0c;编写一个备份脚本来执行MySQL数据库的备份操作。假设你将这个脚本命名为backup.sh…

在vs上远程连接Linux写服务器项目并启动后,可以看到服务启动了,但是通过浏览器访问该服务提示找不到页面

应该是被防火墙挡住了&#xff0c;查看这个如何检查linux服务器被防火墙挡住 • Worktile社区 和这个关于Linux下Nginx服务启动&#xff0c;通过浏览器无法访问的问题_linux无法访问nginx-CSDN博客 的提示之后&#xff0c;知道防火墙开了&#xff0c;想着可能是我写的服务器的…

【R语言】plot输出窗口大小的控制

如果需要输出png格式的图片并设置dpi&#xff0c;可采用以下代码 png("A1.png",width 10.09, height 10.35, units "in",res 300) 为了匹配对应的窗口大小&#xff0c;在输出的时候保持宽度和高度一致即可&#xff0c;步骤如下&#xff1a; 如上的“10…

Ubuntu Docker 安装

curl -fsSL https://test.docker.com -o test-docker.sh sudo sh test-docker.sh Ubuntu Docker 安装 | 菜鸟教程

kali Linux基本命令(超全)_kali linux命令

一、系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件- (SMBIOS / DMI) hdparm -i /dev/hda 罗列一个磁盘的架构特性 hdparm -tT /dev/sda 在磁盘上执行测试性读取操作 cat /proc/cpu…