socket通常也称作"套接字",用于描述IP地址和端口 , 是一个通信链的句柄。应用程序通常通过“套接字”先服务器发出请求或者应答网络请求。本文主要讲述的是在PHP中套节字之间的连接过程,具有一定的参考价值,感兴趣的朋友可以学习了解一下。
根据链接启动的方式以及本地套接字要连接的目标 , 套节字之间的连接过程可以分为三个步骤:
1、服务器监听:是服务器端套接字并不定位具体的客户端套接字 , 而是处于等待连接的状态 ,实时监控网络状态。
2、客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先面熟它要连接的服务器的套接字,指出服务器套接字的地址和端口号 , 然后就像服务器端套接字提出连接请求。
3、连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,他就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端 , 一旦客户确认了此描述 , 连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端接字的链接请求。
一、测试环境:
服务器ip:xxx.xxx.xxx.1
客户端ip: xxx.xxx.xxx.2
二 、测试过程:
客户端服务器将在本机(xxx.xxx.xxx.1)通过socket发送数据到服务端(xxx.xxx.xxx.2)的socket服务器上,服务端收到客户端发送的数据后返回一些给客户端.
三、服务端文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <?php
$tcp = getprotobyname ( "tcp" );
$socket = socket_create(AF_INFT , SOCK_STREAM , $tcp );
socket_bind( $socket , 'xxx.xxx.xxx.1' , 10008);
socket_listen( $socket );
$buffer = "connect" ;
while (true){
$connection = socket-accept( $scoket );
if (!connection){
echo "connect faild" ;
} else {
echo "Socket connected \n" ;
if ( $buffer != "" ){
echo "send data to client\n" ;
socket_write( $connection , $buffer , "\n" );
echo "Wrote to socket\n" ;
} else {
echo "no data in the buffer\n" ;
}
while ( $data = $socket_read ( $connection , 1024 , PHP_NORMAL_READ)){
printf( "Buffer:" . $data .'\n');
socket-wirte( $coennection , "Thank you client , you data is Received success \n" );
}
}
socket_close( $connection );
printf( "Closed the socket\n" );
}
?>
|
Salin selepas log masuk
四、客户端文件内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php
$socket = se);
$connection = socket_connect( $socket , 'xxx.xxx.xxx.1' , 10008);
$send_data = "This data will Send to server!" ;
while ( $buffer = @socket_read( $socket , 1024,PHP_NORMAL_READ)){
if (preg_match( "/not connect/" , $buffer )){
echo "don't connect\n" ;
break ;
} else {
echo "Buffer Data: " . $buffer .'\n';
echo "Writing to Socket\n" ;
if (!socket_write( $socket , "$send_data\n" )){
echo "Write failed\n" ;
}
while ( $buffer = socket_read( $socket , 1024 , PHP_NORMAL_READ)){
echo "send to server: $send-data\n response from server was:" . $buffer . "\n" ;
}
}
}
?>
|
Salin selepas log masuk
五、在服务端socket服务启动进程。
1 2 | #/usr/local/php/bin/php -a/home/server.php
Interactive mode enable 互动模式启动
|
Salin selepas log masuk
六、服务端启动后查看启动的进程及端口
1 2 3 | #netstat -tnlp |grep 10008
tcp 0 0 192.168.13:10008 0.0.0.0:* LISTEN
28892/php
|
Salin selepas log masuk
七、在客户端(192.168.1.2)上执行传输
1 2 | #/usr/local/php/bin/php -a client.php
Interactive mode enabled
|
Salin selepas log masuk
八、回到服务器端上查看接受到的信息。
1 2 3 4 5 6 7 | #/usr/local/php/bin/php -a /home/server.php
Interactive mode enabled
Socket connected
send data client
Wrote to socket
Buffer:This data will Send to server!
|
Salin selepas log masuk
相关教程:PHP视频教程
Atas ialah kandungan terperinci PHP 如何进行socket套节字的连接. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!