当前位置: 首页 > 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);
http://www.lryc.cn/news/448931.html

相关文章:

  • 博客摘录「 GD32的flash读、擦除、写操作」2024年9月2日
  • 【性能优化】低配starRocks常驻内存优化
  • 科研绘图系列:R语言树结构聚类热图(cluster heatmap)
  • 微信小程序操作蓝牙
  • Python爱心射线(完整代码)
  • 努比亚 Z17 NX563J Root 教程三方REC刷写工具教程
  • python 02 List
  • 【秋招笔试】09.28科大讯飞秋招(已改编)-研发岗
  • [SAP ABAP] 锁对象
  • Docker快速部署RabbitMq教程
  • 解决银河麒麟V10中/data目录执行权限问题
  • 画两个数的平方和的曲线
  • 问:进程/线程上下文切换场景及相关概念?
  • 神经网络(一):神经网络入门
  • 卸载apt-get 安装的PostgreSQL版本
  • 低代码用户中心:构建高效便捷的用户管理平台
  • 3款免费的GPT类工具
  • Mixture-of-Experts (MoE): 条件计算的诞生与崛起【上篇】
  • 【算法】分治:归并排序之LCR 170.交易逆序对的总数(hard)
  • 2024.9.28 作业+思维导图
  • 树莓派外挂Camera(基操)(TODO)
  • 讯飞星火编排创建智能体学习(二)决策节点
  • YOLOv5改进:Unified-loU,用于高品质目标检测的统一loU ,2024年8月最新IoU
  • 力扣 简单 112.路径总和
  • OpenMV与STM32通信全面指南
  • Python库matplotlib之二
  • DAY17||654.最大二叉树 |617.合并二叉树 |700.二叉搜索树中的搜索 |
  • 读构建可扩展分布式系统:方法与实践16读后总结与感想兼导读
  • Anaconda 安装
  • 优雅使用 MapStruct 进行类复制