php socket编程入门例子(php菜鸟教程)

网友投稿 363 2022-06-17


服务端代码server.php

//创建socket套接字

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

/**

* 第一个参数说明:

* AF_UNIX(本机通信)

* AF_INET(TCP/IP – IPv4)

* AF_INET6(TCP/IP – IPv6)

* 第二个参数说明:

* SOCK_STREAM(TCP流)

* SOCK_DGRAM(UDP数据报)

* SOCK_RAW(原始套接字)

* 第三个参数说明:

* 如果第二个参数选择的是TCP,则传递SOL_TCP否则就SOL_UDP

*/

if (!$socket) {

echo 'create socket error' . PHP_EOL;

} else {

echo 'create socket success' . PHP_EOL;

}

/**

* 因为一台主机可能存在多个 ip 地址,所以你需要指定你的 socket 监听的是哪一个,

* 常用的值为 127.0.0.1,或者是监听所有地址 0.0.0.0,

* 那么这里可能有人不明白了,127.0.0.1 和 0.0.0.0 有啥区别呢?

* 127.0.0.1 只是一个回环地址,只能用于本机访问,说白了就是自己玩自己的,因为这个 ip 不对外部开放,所以别人也就无法访问这个地址,

* 所以如果你的服务器地址设置为 127.0.0.1,别人想要访问,只能去屎吧。

* 0.0.0.0 严格来说不算是一个 ip 地址,它的意思是本机的所有 IP 地址,都是我的,哈哈。

*/

//绑定ip和端口

$addr = '127.0.0.1';

$port = 8080;

if (socket_bind($socket, $addr, $port)) {

echo 'bind addr success' . PHP_EOL;

} else {

echo 'bind addr error' . PHP_EOL;

}

//监听套接字

if (!socket_listen($socket)) {

echo 'listen socket error' . PHP_EOL;

} else {

echo 'listen socket success' . PHP_EOL;

}

//接受客户端连接

$client = socket_accept($socket);

if (!$client) {

echo 'socket_accept error' . PHP_EOL;

} else {

echo 'socket_accept success' . PHP_EOL;

//接受客户端返回内容

while (true) {

//第一个参数是客户端套接字 第二个参数从socket中获取的数据 第三个参数是设置长度最多为 len 字节的数据将被接收。

$bytesNum = socket_recv($client, $buffer, 100, 0);

if (!$bytesNum) {

echo "socket_recv failed" . PHP_EOL;

exit(1);

} else {

echo "content from client:" . $buffer . PHP_EOL;

}

}

}

客户端代码client.php

//创建socket套接字

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

//连接套接字

if (!socket_connect($socket, '127.0.0.1', 8080)) {

echo 'socket connect error' . PHP_EOL;

exit(1);

} else {

while (true) {

//阻塞进程获取输入内容

$data = fgets(STDIN);

//如果用户输入quit,那么退出程序 这里要去除下空格 因为回车会造成换行符

if (trim($data) == 'quit') {

socket_close($socket);

break;

}

//发送数据给服务端

socket_write($socket, $data);

}

}

这里先运行php server.php,然后运行php client.php,然后输入内容,服务端就能接受到了。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:面试题:如何保证缓存与数据库的双写一致性?(如何保证数据库和缓存双写一致性)
下一篇:openssl 下的对称加密和非对称加密(openssl漏洞)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~