摘要
套接字用于进程间通信。进程间通信通常基于客户机-服务器模型。此时,客户机-服务器是可以相互交互的应用程序。客户端和服务器之间的交互需要连接。套接字编程负责在应用程序之间建立交互式连接。
套接字变量
要生成一个套接字,需要三个变量:一个协议、一个套接字类型和一个公共协议类型。
协议
AF_INET//生成socket的协议是TCP或者UDP传输,使用IPV4的地址。
AF_INET6//生成socket的协议,通过TCP或UDP传输,用于IPV6地址。
AF_unix//本地协议,在unix和linux系统上使用。它很少使用,通常在客户端和服务器在同一台机器上时使用。
Socket typeSOCK _ STREAM//该协议是基于字节流的顺序、可靠、完整的数据链路。这是最常用的插座类型。这个套接字使用TCP进行传输。
SOCK_DGRAM//这个协议是一个无连接、固定长度的传输调用。这个协议不可靠,用UDP来链接。
SOCK_SEQPACKET//这个协议是一个双线的、可靠的链路,发送固定长度的数据包进行传输。这个包必须被完全接受才能被阅读。
SOCK_RAW//此套接字类型提供单一网络访问,此套接字类型使用ICMP协议。
SOCK_RDM//这种类型很少使用,在大多数操作系统上都没有实现。它用于数据链路层,不保证数据包的顺序。
公共协议
ICMP// Internet控制消息协议,主要用于***和主机,检查网络状态并报告错误消息。
UDP//用户数据消息协议,这是一种无连接且不可靠的传输协议。
TCP//传输控制协议是应用最广泛、最可靠的公共协议,可以保证数据包能够到达接收方。如果在传输过程中出现错误,它将重新发送错误数据包。
套接字连接过程
根据连接启动的方式和本地套接字连接的目标,套接字之间的连接过程可以分为三个步骤:服务器监控、客户端请求和连接确认。
(1)服务器监控:服务器套接字不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
(2)客户端请求:指客户端的套接字发出的连接请求,要连接的目标是服务器的套接字。因此,客户端套接字必须首先描述它所连接的服务器的套接字,指明服务器套接字的地址和端口号,然后向服务器套接字发出连接请求。
(3)连接确认:当服务器套接字**或接收到客户端套接字的连接请求时,响应客户端套接字的请求,建立新的线程,并将服务器套接字的描述发送给客户端。一旦客户端确认了这个描述,连接就建立了。而服务器套接字继续处于**状态,并继续接收来自其他客户端套接字的连接请求。
PHP套接字内部源代码
PHP套接字模拟请求
处理纯文本时,fgets获取最后一行字符后,foef函数返回的结果不为真。实际操作过程如下:
while()继续循环。fgets 获取倒数第二行的字符串feof返回false,进入下一次循环fgets获取最后一行数据一旦fegets函数被调用,feof函数仍然返回的是false。所以继续执行循环fget试图获取另外一行,但实际结果是空的。实际代码没有意识到这一点,试图处理另外根本不存在的一行,但fgets被调用了,feof放回的结果仍然是false进入死循环
本文来自繁华落尽与君老投稿,不代表舒华文档立场,如若转载,请注明出处:https://www.chinashuhua.cn/24/534986.html