TCP/IP:传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的
UDP:用户数据报协议,是与tcp相对应的协议。他是属于TCP/IP协议的一种
1.socket是什么?
socket是应用层和TCP/IP协议族通信的中间软件抽象层
它是一组接口
在设计模式中,Socket其实就是一个门面模式。是一组接口,把复杂的TCP/IP协议族隐藏在Socket接口后面
对用户来说,一组简单的就口就是全部,让socket去组织数据,以符合指定的协议
2.代码:
server.php
<?php
set_time_limit(0);
$ip = '127.0.0.1';
$port = 8888;
//1.初始化socket
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);//创建服务端的socket套接流,net协议为IPv4,protocol协议为TCP
//2.端口绑定
if (socket_bind($socket,$ip,$port) == false)/*绑定接收的套接流主机和端口,与客户端相对应*/
{
echo "server bind fail:".socket_strerror(socket_last_error());
}
//3.对端口进行监听
if (socket_listen($socket,4) == false)
{
echo "server listen fail:".socket_strerror(socket_last_error());
}
//4.调用accept阻塞,等待客户端连接
do{
$accept_resource = socket_accept($socket);
/*socket_accept的作用就是接受socket_bind()所绑定的主机发过来的套接流*/
if ($accept_resource!==false)
{
//5.接受客户端请求数据
$string = socket_read($accept_resource,1024);
/*socket_read的作用就是读出socket_accept()的资源并把它转化为字符串*/
echo "Receive:".$string.PHP_EOL;
if ($string!==false){
$return_client = "消息已经接收:".date("Y-m-d H:i:s").PHP_EOL;
//6.回应数据发送给客户端
socket_write($accept_resource,$return_client,strlen($string));
/*socket_write的作用是向socket_create的套接流写入信息,或者向socket_accept的套接流写入信息*/
}else{
echo "socket_read is fail";
}
}
}while(true);
socket_close($socket);
client.php
<?php
//初始化一个Socket 创建一个socket套接流
$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
//接收套接流的最大超时时间1秒,后面是微秒单位超时时间,设置为零,表示不管它
socket_set_option($socket,SOL_SOCKET,SO_RCVTIMEO,array("sec"=>1,"usec"=>0));
//发送套接流的最大超时时间为6秒
socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>6,"usec"=>0));
//连接服务端的套接流,这一步就是使客户端与服务器端的套接流建立联系
if (socket_connect($socket,'127.0.0.1',8888) == false)
{
echo "connect fail message:".socket_strerror(socket_last_error());
}else{
$message = "hello,server";
$message = mb_convert_encoding($message,'GBK','UTF-8');
//向服务端写入字符串信息
if (socket_write($socket,$message,strlen($message)) == false)
{
echo 'fail to write'.socket_strerror(socket_last_error());
}
//读取服务端返回来的套接流信息
while ($callback = socket_read($socket,1024))
{
echo 'server return message is:'.$callback.PHP_EOL;
}
}
socket_close($socket);