【C++】Socket编程基础

文章目录

    • 套接字
      • 通信类型
      • 名空间
      • 套接字函数
        • socket():创建套接字
        • bind()函数:绑定服务器套接字与其地址、端口
        • listen()函数:侦听客户连接
        • connect():连接套接字
        • accept()函数:服务器接受连接,并为该连接创建一个新的套接字
        • send():发送数据
        • close():释放套接字

套接字

通信类型

   通信类型控制套接字如何传输和处理数据,数据以包的形式传输

  • 连接类型:确保所有包依序传输,丢包则重传
  • 数据报类型:不保证包的按序到达,可能会丢失

名空间

  • 本地名空间:套接字地址为普通地址名,使用在本地通信
  • 网络名空间:套接字地址由Internet地址和端口号(区分一台主机上多个套接字)确定,使用在网络通信

套接字函数

socket():创建套接字
  • 原型:int socket(int domain,int type,int protocal);
  • 参数:名空间、通信类型、协议
  • 名空间:PF_LOCAL(本地名空间)、PF_INET(网络名空间)
  • 通信类型:SOCK_STREAM(连接类型)、SOCK_DGRAM(数据包类型)
  • 协议:0,系统自动选择协议,有IPPROTO_TCP或IPPROTO_UDP
  • 返回值:套接字描述符
bind()函数:绑定服务器套接字与其地址、端口
  • 原型:int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • 参数:sockfd为服务端创建的套接字文件描述符,addr指向一个地址结构包含服务器本身的地址以及端口号,addrlen为结构体addr的长度
listen()函数:侦听客户连接
  • 原型:int listen(int sockfd, int backlog);
  • 参数:sockfd为已绑定IP地址和端口号的套接字描述符、backlog指定有多少个挂起连接可以进入队列,超出该值的连接将被抛弃
connect():连接套接字
  • 创建两个套接字的连接,客户发起系统调用,申请与服务器建立连接
  • 原型:int connect(int sockfd,const struct sockaddr* addr,socklen_t addrlen);
  • 参数:sockfd为客户端创建的套接字文件描述符,addr指向一个地址结构包含服务器绑定的地址以及端口号,addrlen为结构体addr的长度
  • 返回值:0成功、-1失败
accept()函数:服务器接受连接,并为该连接创建一个新的套接字
  • 原型:int accept(int sockfd, struct sockaddr *addr, socklen_t addrlen);
  • 参数:sockfd为监听状态的套接字描述符、addr指向一个地址结构包含客户端的地址,addrlen为结构体addr长度
  • 返回值:成功返回新创建的、与客户端连接的套接字描述符,失败返回-1
  • 原先套接字文件描述符可以继续接受新连接
send():发送数据
  • 原型:ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • 原型:ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addr_len);
  • 原型:ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);
  • 只有在套接字处于连接状态时才可调用
close():释放套接字
  • int close(int fd);

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

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

相关文章

在 Vue 应用中下载.doc文档(或任何其他类型的文件)

在 Vue 应用中下载.doc文档(或任何其他类型的文件) 在Vue应用中下载.doc文档(或任何其他类型的文件)通常涉及到后端提供一个文件下载的接口,前端通过发送请求到这个接口来触发文件下载。以下是如何在 Vue 中实现文件下…

LC 旋转 - 模拟对象

原文链接 链接 液晶 (LC) 旋转网格属性允许您以 theta、phi 为单位指定空间变化的 LC 导向。 液晶由杆状分子结构组成,这些分子结构具有相对于长轴的旋转对称性。因此,液晶具有空间变化的单轴光学特性。 相对于分子长轴和分子短轴的折射率称为非寻常 ne …

Python生成requirements.txt的方法

在Python项目中,requirements.txt 文件通常用于列出项目所需的所有Python包及其版本。这样,其他人或系统可以轻松地安装所有必要的依赖项,以确保项目的正确运行。 以下是生成 requirements.txt 文件的几种方法: 方法1:使用 pip freeze 如果你的项目环境中已经安装了所有…

《广告数据定量分析》第3版读书笔记之统计原理

1.点估计与区间估计:可用于求指标误差区间;(不常用) (1)总体比例的置信区间: 通过样本数据计算的比例,估计总体的对应比例的取值范围。主要适用于用户转化漏斗各环节的转化率估计,比如点击率、点击下载率、下载安装率、安装激活率等。 我们可以得到总体百分比的一个…

cad编程软件怎么使用:深入探索与实用指南

cad编程软件怎么使用:深入探索与实用指南 CAD编程软件作为现代设计与制造领域的重要工具,其使用方法和技巧对于提高设计效率和质量至关重要。本文将从四个方面、五个方面、六个方面和七个方面,详细解析CAD编程软件的使用方法,帮助…

SRS介绍及环境搭建

1.SRS简介 SRS(Simple Real-Time Media Server)是一个开源的流媒体服务器,它支持多种流媒体协议,包括RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等57。SRS主要应用于直播、视频会议等场景,提供实时音视频服…

【刷题(14)】二叉树

一、二叉树基础 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* …

【并发程序设计】12.内存映射

12.内存映射 使一个磁盘文件与内存中的一个缓冲区相映射&#xff0c;进程可以像访问普通内存一样对文件进行访问&#xff0c;不必再调用read,write&#xff0c;更加高效。 用到的函数 mmap函数 原型&#xff1a; #include <sys/mman.h> void* mmap(void* start, size_…

【GD32】05 - PWM 脉冲宽度调制

PWM PWM (Pulse Width Modulation) 是一种模拟信号电平的方法&#xff0c;它通过使用数字信号&#xff08;通常是方波&#xff09;来近似地表示模拟信号。在PWM中&#xff0c;信号的占空比&#xff08;即高电平时间占整个周期的比例&#xff09;被用来控制平均输出电压或电流。…

MFC 解决Enter回车键和Esc取消键默认关闭窗口的三种方法

文章目录 问题描述问题原因解决办法方法一&#xff1a;在重载的PreTranslateMessage 函数中屏蔽回车和ESC 的消息方法二&#xff1a;重载OnOK函数方法三&#xff1a;将所有按钮类型设为普通按钮&#xff0c;并设置其中一个按钮为默认按钮 问题描述 一般情况下编写的MFC对话框程…

HTML语义化标签

<header> 主要用于网页整体顶部&#xff0c;<article>头部&#xff0c;<section>头部 <nav> 导航&#xff0c;一般有主要导航&#xff0c;路径导航&#xff0c;章节导航&#xff0c;内容目录导航 <main> 网页主要区域&#xff0c;一般一个网页…

【运维项目经历|025】企业高效邮件系统部署与运维项目

目录 项目名称 项目背景 项目目标 项目成果 我的角色与职责 我主要完成的工作内容 本次项目涉及的技术 本次项目遇到的问题与解决方法 本次项目中可能被面试官问到的问题 经验教训与自我提升 展望未来 项目名称 企业高效邮件系统部署与运维项目 项目背景 随着企业…

男人圣经 13

男人圣经 13 进入大我《百忍诀》VS 训练出更高级的默认网络手眼通天 进入大我 现代世界最大的一个好处是给普通人提供了空前的机会。如果你能提供一种比别人好的产品或者服务&#xff0c;你就会脱颖而出。 而人分成大我&#xff08;神性基因&#xff09;、小我&#xff08;兽…

大宋咨询(深圳产品价格调查)如何开展电子商品渠道价格监测

开展电子商品渠道价格监测是当今电商时代的重要任务之一。随着电子商务的迅猛发展&#xff0c;电子商品的价格波动日益频繁&#xff0c;市场竞争也愈发激烈。为了解优化渠道管理策略&#xff0c;提升品牌竞争力&#xff0c;大宋咨询&#xff08;深圳市场调查&#xff09;受客户…

【C#】转换8位或16位像素值为Bitmap

1.转换16位像素值为Bitmap,不带颜色空间信息&#xff08;如RGB&#xff09;的16位图像 public static Bitmap Convert16BitGrayscaleToBitmap(byte[] grayscale16Data, int width, int height){// 创建一个8位灰度Bitmap用于存储转换后的图像Bitmap bitmap new Bitmap(width, …

AI之下 360让PC商业生态大象起舞

时隔7年&#xff0c;淘宝PC版在前不久迎来重磅升级&#xff0c;在产品体验、商品供给、内容供给等方面做了全面优化&#xff0c;以全面提升PC端的用户体验&#xff1b;当大家都以为移动互联网时代下APP将成为主流时&#xff0c;PC端却又成为了香饽饽。其实PC端被重视&#xff0…

3389,为了保障3389端口的安全,我们可以采取的措施

3389端口&#xff0c;作为远程桌面协议&#xff08;RDP&#xff09;的默认端口&#xff0c;广泛应用于Windows操作系统中&#xff0c;以实现远程管理和控制功能。然而&#xff0c;正因为其广泛使用&#xff0c;3389端口也成为许多潜在安全威胁的入口。因此&#xff0c;确保3389…

go 针对 time类型字段,前端查询,后端返回数据格式为UTC时间

测试代码 package mainimport ("context""log""net/http""time""github.com/gin-gonic/gin""go.mongodb.org/mongo-driver/bson""go.mongodb.org/mongo-driver/bson/primitive""go.mongodb.org/m…

鸿蒙ArkTS声明式开发:跨平台支持列表【显隐控制】 通用属性

显隐控制 控制组件是否可见。 说明&#xff1a; 开发前请熟悉鸿蒙开发指导文档&#xff1a; gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本…