php-socket

网络中是如何通信数据传输?

ip+端口+协议

实现网络进程之间的通信,几乎所有的应用程序都是采用socket,“一切皆socket”。


HTTP TCP SOCKET 区别

Http协议:对应于应用层。Http协议是基于TCP链接的。
tcp协议:对应于传输层
ip协议: 对应与网络层

TCP/IP是传输层协议,主要解决数据如何在网络中传输;而Http是应用层协议,主要解决如何包装数据。

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。

Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即会断掉。

socket连接:socket连接及时所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。

什么是socket?

Socket的英文原义是“孔”或“插座”,通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

socket连接的3个步骤

  (1)服务器监听:ip+端口号
(2)客户端请求:发出向 服务器 的 ip以及端口连接请求
(3)连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求

server.php
 
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_bind($socket,'0.0.0.0',6666);
socket_listen($socket);
$sock = socket_accept($socket);
$res = socket_read($sock,2048);
echo $res;
socket_write($sock,'hello client');
 
client.php
 
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
socket_connect($socket,'127.0.0.1',6666);
$msg = 'hlllo server';
socket_write($socket,$msg);
$res = socket_read($socket,2048);
原文地址:https://www.cnblogs.com/zh718594493/p/12853940.html