北京做网站的好公司什么网站做博客好
news/
2025/9/22 20:31:52/
文章来源:
北京做网站的好公司,什么网站做博客好,厦门微信网站建设,自学python需要的软件#xff08;1#xff09;socket套接字 1#xff09;在linux环境下#xff0c;socket用于表示进程间网络通信的特殊文件类型#xff0c;其本质是内核借助缓冲区形成的伪文件#xff08;不占磁盘空间#xff0c;除此之外还有二进制文件#xff0c;管道#xff0c;字符文…1socket套接字 1在linux环境下socket用于表示进程间网络通信的特殊文件类型其本质是内核借助缓冲区形成的伪文件不占磁盘空间除此之外还有二进制文件管道字符文件。 2伪文件也可以像文件一样的操作读写区别在于管道用于本地进程间的通信套接字多用于网络进程间数据的传递。 3在TCP/IP协议中IP地址可以在网络环境中唯一标识一个主机端口号则在主机中唯一标识一个进程。因此在网络中IP地址端口号就对应一个socket。 4)在网络通信中套接字一定成对存在。一段的发送缓冲区对应对端的接收缓冲区使用同一个文件描述符可以操作发送缓冲区和接收缓存区。全双工文件描述符一个数据缓存区两个
2网络字节序 1大端字节序低地址高位、高地址低位 小端字节序低地址低位高地址高位windows 2网络数据流地址规定先发出的数据是低地址后发出的数据是高地址。 TCP/IP协议规定网络数据流采用大端字节序即低地址高字节。 3为了保证网络程序具有可移植性需要调用库函数做网络字节序和主机字节序的转换。 #includearpa/inet.h uint32_t htonl(uint32_t hostlong); //host to net long IP uint16_t htons(uint16_t hostshort); //host to net short port uint32_t ntohl(uint32_t netlong); //net to host long IP uint16_t ntohl(uint16_t netshort); //net to host short port 如果主机是小端字节序这些函数将参数做相应的大小端转换后返回。如果主机是大端字节序则不做转换。
3IP地址转换 1通常我们所说的IP地址如192.168.1.200属于点分十进制形式而我们在网络传输中通常使用到的是网络字节序形式因此在传输的过程中首先需要把点分十进制形式的字符串转换为网络字节序格式。 2IP地址转换函数 #includearpa/inet.h int inet_pton(int af ,const char *src, void *dst);//点分十进制字符串转换为网路字节序 const char *inet_ntop(int af, const void *src, char *dst, socklen_t size);//网络字节序转换为点分十进制 参数afIP地址格式AF_INET(IPV4) AF_INET6(IPV6) 3)sockaddr数据结构 struct sockaddr诞生于IPV4协议时代函数的接口通常使用struct sockaddr,但是现在为了兼容IPV6将struct sockaddr 改变成了struct sockaddr_t格式因此现在定义变量时使用struct sockaddr_t在传参数时使用struct sockaddr不能直接用这个定义变量 struct sockaddr{ struct sockaddr_in{ struct in_addr{ sa_family_t sa_family; _kernel_sa_family_t sin_family; //地址结构类型 _be32 s_addr;IP地址 char sa_data[14]; _be16 sin_port; //端口号 };
}; struct in_addr sin_addr; ...... }; 4Socket模型创建流程图 注TCP客户端没有调用bind()函数绑定IP和端口号系统会自动给它分配IP和端口号但在TCP服务端则不能省去bind()函数。 5网络套接字函数 头文件#includesys/types.h #includesys/socket.h 1打开一个网络通讯端口socket函数(服务端、客户端 int socket(int domain, int type ,int protocol); 参数domain:协议类型AF_INET(IPV4) AF_INET6(IPV6) AF_UNIX(本地协议 type:SOCK_STREAM(流失协议默认为TCP传输 SOCK_DGRAM(报式协议默认使用UDP传输 protocol:使用默认协议 返回值成功返回新创建socket的文件描述符失败返回-1. 2绑定IP和端口号bind函数服务端/客户端 int bind(int sockfd , const struct sockaddr *addr, socklen_t addrlen); 参数sockfd : socket 文件描述符 addr:绑定了IP和端口号的结构体 addrlensizeof(addr)长度 返回值成功返回0失败返回-1. 3指定监听上限数同一时间允许多少客户端和服务器连接listen函数服务端 int listen(int sockfd, int backlog 参数backlog:排队进行三次握手队列和刚刚建立三次握手队列的链接数和。 返回值成功返回0失败返回-1 4接收连接请求accept函数服务端调用 int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen); 参数addr(传出参数返回链接客户端地址信息含IP和端口号。 5连接客户端connect函数客户端调用 int connect(int sockfd,const struct *sockaddrsocklen_t addrlen 参数addr:传入参数指定服务器的地址信息含IP地址和端口号。 addrlen:sizeof(addr大小 返回值成功返回0失败返回-1. addrlen传入传出参数传入sizeofaddr)大小函数返回真正接收到的地址结构体的大小。 返回值:生成一个新的socket文件描述符用于和客户端通信失败返回-1
(6) C/S模型之TCP实现最简单的客户端、服务器程序 服务器端可通过命令nc 自己ip 端口号完成自我通信在不同进程使用nc 182.168.1.100 6666 客户端
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/910278.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!