socket初试

        用php好几年了,工作中一直没用到socket这块,今天心血来潮,顺着手册及网上资料试了试。


        socket是在服务器端和客户端之间通讯的,因此这里就准备这两端。


        服务器端先初始化socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接。这时如果有个客户端初始化一个socket,然后连接服务器(connect),如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。




        代码如下

<?php

// 服务端
set_time_limit(0);
$ip = '127.0.0.1';
$port = 3290;

if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    echo "socket_create() failed,reason:" . socket_strerror($sock) . PHP_EOL;
}

if (($ret = socket_bind($sock, $ip, $port)) < 0) {
    echo "socket_bind() failed,reason:" . socket_strerror($ret) . PHP_EOL;
}

if (($ret = socket_listen($sock, 4)) < 0) {
    echo "socket_listen() failed,reason:" . socket_strerror($ret) . PHP_EOL;
}

$count = 0;

do {
    if (($msgsock = socket_accept($sock)) < 0) {
        echo "socket_accept() failed,reason:" . socket_strerror($msgsock) . PHP_EOL;
        break;
    }

    $msg = 'test sucess' . PHP_EOL;
    socket_write($msgsock, $msg , strlen($msg));

    echo 'test sucess';
    $buf = socket_read($msgsock, 1024);
    echo 'receive message' . $buf . PHP_EOL;

    if (++$count >=5) {
        break;
    }

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

socket_close($sock);

<?php

// 客户端
error_reporting(E_ALL);
set_time_limit(0);
echo 'TCP/IP Connection' . PHP_EOL;

$ip = '127.0.0.1';
$port = 3290;

if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    echo 'socket_create() failed,reason ' . socket_strerror($sock) . PHP_EOL;
} else {
    echo 'OK' . PHP_EOL;
}

echo 'Try to connect ' . $ip . ' port ' . $port . '...' . PHP_EOL;
if (($result = socket_connect($sock, $ip, $port)) < 0) {
    echo 'socket_connect() failed,reason ' . socket_strerror($result) . PHP_EOL;
} else {
    echo 'Connect suessful';
}

$in = "Hi\r\nThis is a test new\r\n";

if (socket_write($sock, $in, strlen($in))) {
    echo 'Send success' . PHP_EOL;
    echo "Send message is \r\n" . $in . PHP_EOL;
} else {
    echo 'socket_write() failed,reason ' . socket_strerror($result) . PHP_EOL;
}

while ($out = socket_read($sock, 1024)) {
    echo 'Receive server message success' . PHP_EOL;
    echo 'Message is :' . $out . PHP_EOL;
}

echo 'Close SOCKET ...' .PHP_EOL;
socket_close($sock);
echo 'Close OK' . PHP_EOL;

        在服务器上,先跑服务端代码




        再跑客户端代码。



        

        至此,初试socket结束,以后或许会用到。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值