php socket class,php socket聊天示例代码

php socket聊天示例代码

php socket聊天示例代码.。闲来无事,随便写写代码练练手,想搞个socket聊天的小程序,收货也不小,懂得了些东西。

socket_server.php<?php

class SocketServer

{

private $ip;

private $port;

private $socket;

public function __construct($ip = '127.0.0.1', $port = '9999')

{

$this->ip   = $ip;

$this->port = $port;

if (!extension_loaded('sockets')) {

die('The sockets extension is not loaded.');

}

$tcp = getprotobyname("tcp");

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

if (!$socket) {

die('Unable to create AF_INET socket');

}

@socket_bind($socket, $ip, $port) or die('socket bind failed' . PHP_EOL);

@socket_listen($socket, 1) or die('socket listen failed' . PHP_EOL);

echo 'Server start...' . PHP_EOL;

$this->socket = socket_accept($socket);

}

public function run()

{

while (true) {

$this->sendMsg($this->socket);

echo $this->readMsg($this->socket) . PHP_EOL;

sleep(3);

}

socket_close($this->socket);

}

public function sendMsg($socket)

{

// $handle = fopen("php://stdin", "r");

// $input  = fgets($handle);

$input = 'Server send msg to Client: ' . date('Y年m月d日 H时i分s秒', time());

socket_write($socket, $input);

}

public function readMsg($socket)

{

return socket_read($socket, 1024);

}

}

$server = new SocketServer();

$server->run();

socket_client.php<?php

class SocketClient

{

private $ip;

private $port;

private $socket;

public function __construct($ip = '127.0.0.1', $port = '9999')

{

$this->ip   = $ip;

$this->port = $port;

if (!extension_loaded('sockets')) {

die('The sockets extension is not loaded.');

}

$tcp    = getprotobyname("tcp");

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

if (!$socket) {

die('Unable to create AF_INET socket');

}

@socket_connect($socket, $this->ip, $this->port) or die(PHP_EOL . 'connect to server faild!' . PHP_EOL);

$this->socket = $socket;

echo 'Connect success' . PHP_EOL;

}

public function run()

{

while (true) {

echo $this->readMsg($this->socket) . PHP_EOL;

$this->sendMsg($this->socket);

sleep(3);

}

socket_close($this->socket);

}

public function sendMsg($socket)

{

// $handle = fopen("php://stdin", "r");

// $input  = fgets($handle);

$input = 'Client send msg to Server: ' . date('Y-m-d H:i:s', time());

socket_write($socket, $input);

}

public function readMsg($socket)

{

return socket_read($socket, 1024);

}

}

$client = new SocketClient();

$client->run();

最终实现的效果是,客户端和服务端能互通消息,但不够强大。存在很多问题,例如不能一次性发多条信息给对方,对方自然也不能一次性收多条消息,还有不能解决命令行输入阻塞的问题,所以注释了

// $handle = fopen("php://stdin", "r");

// $input  = fgets($handle);

看来用原生的php写一个聊天小程序还要遇到很多问题需要解决,要想快速的完成得借助workerman或者swoole这样的框架了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值