您的位置:首页 > 编程语言 > PHP开发

PHP Socket 学习记录client service

2017-05-07 00:00 429 查看

一、环境

开启php_sockets扩展

二、client代码

tip:地址要换成服务端的保持一致

set_time_limit(0);
$host = "192.168.186.128";
$port = 3046;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create  socket\n");

$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n");

do{
echo("input what you want to say to the server:\n");
$text = trim(fgets(STDIN));
if($text === 'quit'){
break;
}
socket_write($socket,$text,strlen($text)) or die("Write failed\n");

$result=socket_read($socket, 1024);
if(!$result){
echo "connect failed\n";
break;
}else{
echo("Response was:" . $result . "\n");
}

}while(true);
socket_close($socket);


三、service代码

set_time_limit(0);
$ip = '192.168.186.128';
$port = 3046;

$handle = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!$handle) {
die('create socket fail:' . socket_last_error() . '-' . socket_strerror(socket_last_error()));
}

if (!socket_set_block($handle)) {
die('set socket fail:' . socket_strerror(socket_last_error()));
}

if (!socket_bind($handle, $ip, $port)) {
die('bind socket fail:' . socket_strerror(socket_last_error()));
}

if (!socket_listen($handle, SOMAXCONN)) {
die('create listen fail:' . socket_strerror(socket_last_error()));
}

echo "OK\nBinding the socket on $ip:$port ... ";
echo "OK\nNow ready to accept connections.\nListening on the socket ... \n";

do {
$msg_handle = socket_accept($handle) or die(socket_strerror(socket_last_error()));

do {
echo "read ... \n";
$row = socket_read($msg_handle, 8192);
if(!$row || $row == 'bye'){
break;
}
echo "content:$row\n";

$result = "you send content is :$row";
socket_write($msg_handle, $result, strlen($result)) or die(socket_strerror(socket_last_error()));

} while (true);

socket_close($msg_handle);
} while (true);

socket_close($handle);

缺点不能多线程,一次一个连接,回头再家多线程吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php socket