1、案例函数汇总
2、案例
通过socket创建tcp,并等待客户端连接。然后分别打印本地和远程的ip和port连接信息。并客户端发送的信息原封不动地发还会给客户端
2.1、tcp服务源码
/**
* Copyright(C) Iamasb
* @project : 3、workerman相关知识点
* @explain : 原生socket创建创建tcp服务
* @filename : socket_tcp.php
* @author : Iamasb
*/
// 创建tcp
if (!($resource = socket_create(AF_INET,SOCK_STREAM,SOL_TCP))) {
echo "socket create is error";
exit();
}
// 绑定当前主机和端口
if (!socket_bind($resource,'0.0.0.0','1234')) {
echo "socket bind is error";
exit();
}
// 启动监听
if (!socket_listen($resource)) {
echo "socket listen is error";
exit();
}
// 设置端口复用
if (!socket_set_option($resource, SOL_SOCKET, SO_REUSEADDR, 1)) {
echo 'Unable to set option on socket: '. socket_strerror(socket_last_error()) . PHP_EOL;
exit;
}
while (1) {
$client = socket_accept($resource);
socket_getsockname($client,$addr,$port);
echo 'local->',$addr,'-->',$port,PHP_EOL;
socket_getpeername($client,$addr,$port);
echo 'remote->',$addr,'-->',$port,PHP_EOL;
$string = socket_read($client,1024);
echo $string;
socket_write($client,$string,strlen($string));
socket_close($client);
}
2.2、启动tcp服务
3、测试
测试有两种方式,一种是通过编写客户端,另一种是通过telnet
3.1、通过telnet
此时tcp服务端的显示结果
3.2、通过socket编写tcp客户端,并执行客户端
/**
* tcp 客户端
*/
if (!($resource = socket_create(AF_INET,SOCK_STREAM,SOL_TCP))) {
echo "socket create is error";
exit();
}
if (!socket_connect($resource,'127.0.0.1','1234')) {
echo 'connect is error';
exit();
}
$string = 'hello world';
echo socket_send($resource,$string,strlen($string),MSG_EOF);
echo socket_read($resource,1024);