socket
# 字节序转换函数、IP地址转换函数
/* 网络字节序采用大端 网络通信时,需要将主机字节序转换成网络字节序(大端), 另外一个主机获取到数据后根据情况将网络字节序转换成主机字节序 #include <arpa/inet.h> // 转换32位数据,一般用于转换ip uint32_t htonl(uint32_t hostlong); uint32_t ntohl(uint32_t netlong); // 转换16位数据,一般用于转换端口号 uint16_t htons(uint16_t hostshort); uint16_t ntohs(uint16_t netshort); IP地址转换函数 #include <arpa/inet.h> int inet_pton(int af, const char *src, void *dst); 参数: af:地址族,AF_INET、AF_INET6 src:点分十进制的ip地址 dst:传出参数,转换后的结果 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size); 参数: af:地址族,AF_INET、AF_INET6 src:ip地址的整数 dst:传出参数,转换后的结果,字符串 size:第三个参数的大小(数组的大小) 返回值: 返回转换后的结果,和dst一样,const不能修改 */ #include <stdio.h> #include <arpa/inet.h> int main() { // unsigned short a = 0x1234; // unsigned short c = htons(a); // printf("%x\n%x\n", a, c); // printf("=================================\n"); // unsigned char buf[4] = {192, 168, 1, 1}; // unsigned int num = *(unsigned int *)buf; // unsigned int sum = htonl(num); // unsigned char *p = (unsigned char *)∑ // printf("%d %d %d %d\n", *p, *(p + 1), *(p + 2), *(p + 3)); char string_ip[] = "192.168.1.1"; unsigned int int_ip; inet_pton(AF_INET, string_ip, (void *)&int_ip); char buf[16]; inet_ntop(AF_INET, (void *)& int_ip, buf, sizeof(buf)); // printf("%d %d %d %d\n", *); printf("%s\n", buf); return 0; }
# socket函数
/* #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol); 功能:创建一个套接字 参数: domain:协议族 AF_UNIX, AF_LOCAL:本地(进程间通信) AF_INET:ipv4 AF_INET6 :ipv6 type:通信过程中使用的协议类型 SOCK_STREAM:流式协议 SOCK_DGRAM:报式协议 protocol:具体的一个协议,一般写0 SOCK_STREAM:流式协议默认使用TCP SOCK_DGRAM:报式协议默认使用UDP 返回值: 成功:文件描述符 失败:-1 int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能:绑定ip和端口号 参数: sockfd:通过socket得到的文件描述符 addr:需要绑定的socket地址,封装了IP和端口号的信息 addrlen:第二个参数的大小 返回值: 成功:0 失败:-1 int listen(int sockfd, int backlog); 功能:监听这个sockfd上的连接 参数: sockfd:socket的文件描述符 backlog:max(半连接队列,全连接队列) int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); 功能:接收客户端连接,阻塞函数 参数: sockfd:用于监听的文件描述符 addr:传出参数,连接成功后客户端的地址信息 addrlen:第二个参数对应的内存大小 返回值: 成功:用于通信的文件描述符 失败:-1 int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能:客户端连接服务器 参数: sockfd:用于通信的文件描述符 addr:客服端要连接服务器的地址信息 addrlen:第二个参数的大小 返回值: 成功:0 失败:-1 */
自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)