php socket编程封装,php socket编程入门例子

e254486d96148e2df8ed20a074630e16.png

服务端代码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,然后输入内容,服务端就能接受到了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值