当前位置: 首页 > 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.mrgr.cn/news/38634.html

相关文章:

  • ★ C++进阶篇 ★ map和set
  • KaiOS statusbar 更新代码逻辑
  • 828华为云征文|部署个人知识管理系统 SiyuanNote
  • gtk4学习
  • 程序员如何保持与提升核心竞争力在技术变革中立于不败之地
  • 每天五分钟深度学习PyTorch:如何使用GPU来跑深度学习算法模型?
  • 【C语言】字符函数和字符串函数(1)
  • DeepSpeed笔记--利用Accelerate实现DeepSpeed加速
  • 零基础教你如何开发webman应用插件
  • 【数据挖掘】2023年 Quiz 1-3 整理 带答案
  • (十七)、Mac 安装k8s
  • Redis缓存双写一致性笔记(上)
  • 视频格式转换:avi格式转mp4格式
  • 盘点4款专业高效的数据恢复工具。
  • 基于SpringBoot+Vue+MySQL的甜品店管理系统
  • 衡石分析平台系统管理手册-功能配置之资源管理
  • MyBatis操作数据库(入门)
  • Elasticsearch学习笔记(2)
  • 【python】代码发布前检查- vulture:查找死代码
  • [CKA]CKA预约和考试