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

网络编程操作—函数

一、socket创建套接字

#include <sys/types.h>        //头文件

#include <sys/socket.h>

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

 三个参数:domain、type、protocol

1.domain:域名,领域,定义域(中文解释)

本地域通信 [ AF_UNIX, AF_LOCAL        (Local communication) ]   

网络域通信 [ AF_INET         (IPv4 Internet protocols)]

2.type:类型(中文解释)

面向数据报:SOCK_DGRAM

面向字节流:SOCK_STREAM 

3.protocol:协议(中文解释)

设置为0;

4.强行记下来

此函数写了不下5遍,一直忘了写:给自己做个笔记

int opt=1;

setsockopt(_listensock,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));   //如果程序挂了,则立刻可以按原来端口重新启动

二、bind绑定

#include <sys/types.h>        //头文件
#include <sys/socket.h>

#include <netinet/in.h>        //后两个是结构体的头文件

#include <arpa/inet.h>

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

参数:

1.sockfd:套接字

使用:socket的返回值->套接字

2.struct sockaddr结构体

struct sockaddr_in:网络通信使用此结构体:遵守IP协议

绑定的套路:

 struct sockaddr_in local;

memset(&local, 0, sizeof local);

local.sin_family = AF_INET;

local.sin_port = htons(port);

local.sin_addr.s_addr=ip.empty()?INADDR_ANY:inet_addr(ip.c_str());

int n = bind(listensock, (struct sockaddr *)&local, sizeof(local));

2.1大小端转化函数

#include <arpa/inet.h>

uint32_t htonl(uint32_t hostlong);

uint16_t htons(uint16_t hostshort);

uint32_t ntohl(uint32_t netlong);

uint16_t ntohs(uint16_t netshort);

这些函数名很好记,h表示host,n表示network,l表示32位长整数,s表示16位短整数。

例如htonl表示将32位的长整数从主机字节序转换为网络字节序,例如将IP地址转换后准备发送。

如果主机是小端字节序,这些函数将参数做相应的大小端转换然后返回;

如果主机是大端字节序,这些 函数不做转换,将参数原封不动地返回。

2.2socklen_t addrlen  结构体的长度

 三、listen

监听:将套接字(文件描述符)变成监听状态;监视是否有链接进入;

// 开始监听 socket (TCP, 服务器 )
int listen(int socket, int backlog);

参数

1.socket:套接字(文件描述符);将创建的套接字传入;

2.backlog:监听的队列;比如有大量的链接进入,只能连1个链接;剩余的没连上的‘就会等待被链接;

四、accept

// 接收请求 (TCP, 服务器 )
int accept(int socket, struct sockaddr* address,
                socklen_t* address_len);

 五、connect

 // 建立连接 (TCP, 客户端)

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

相关文章:

  • Comfyui 学习笔记2
  • react:React Hook函数
  • 【iOS】计算器的仿写
  • 秦巴山区SHP格式矢量范围
  • OpenCV视频I/O(4)视频采集类VideoCapture之获取异常处理模式函数getExceptionMode()的使用
  • PHP的guzzlehttp/guzzle库在碰到各种异常时的场景
  • 【rust】 基于rust编写wasm,实现markdown转换为html文本
  • 智驭未来·电网负荷智控系统
  • <<迷雾>> 第 2 章 用电来表示数 示例电路
  • 700. 二叉搜索树中的搜索
  • 【JAVA】算法笔记
  • pkg升级导致xfce虚拟终端无法启动甚至xfce挂死无法登入@FreeBSD(未解决)
  • Linux安装JDK及配置环境变量超详细教程
  • C++那些你不得不知道的(2)
  • 3D Slicer医学图像全自动AI分割组合拳-MONAIAuto3DSeg扩展
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 2019.2.20 c++ 知识梳理
  • 30秒的PHP代码片段(1)数组 - Array
  • docker python 配置
  • java8 Stream Pipelines 浅析
  • Javascript编码规范
  • jquery cookie
  • Laravel 实践之路: 数据库迁移与数据填充
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Median of Two Sorted Arrays
  • Mysql优化
  • python docx文档转html页面
  • React-flux杂记
  • tab.js分享及浏览器兼容性问题汇总
  • vue-router 实现分析
  • 多线程 start 和 run 方法到底有什么区别?
  • 给初学者:JavaScript 中数组操作注意点
  • 简单易用的leetcode开发测试工具(npm)
  • 浏览器缓存机制分析
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 算法---两个栈实现一个队列
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 通过git安装npm私有模块
  • 通过npm或yarn自动生成vue组件
  • 一个SAP顾问在美国的这些年
  • FaaS 的简单实践
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # SpringBoot 如何让指定的Bean先加载
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #if #elif #endif
  • #include<初见C语言之指针(5)>
  • #nginx配置案例
  • #stm32整理(一)flash读写
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • $.ajax中的eval及dataType
  • (03)光刻——半导体电路的绘制
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (zt)基于Facebook和Flash平台的应用架构解析