+ -
当前位置:首页 → 问答吧 → [美丽的代码]---PHP用SOCKET实现(客户端---服务端)通信

[美丽的代码]---PHP用SOCKET实现(客户端---服务端)通信

时间:2008-09-26

来源:互联网

不知道可不可以再发,好像会在这期杂志上出现,这是大部分内容
客户端与服务端的代码分别如下:
Server.php

<?php
error_reporting(E_ALL);
set_time_limit(0);
ob_implicit_flush();
//本地IP
$address = 'localhost';
//设置用111端口进行通信
$port = 111;
//创建SOCKET
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) < 0) {
    echo "socket创建失败原因 " . socket_strerror($sock) . "\n";
}

if (($ret = socket_bind($sock, $address, $port)) < 0) {
    echo "创建套接字失败原因 " . socket_strerror($ret) . "\n";
}
//监听
if (($ret = socket_listen($sock, 5)) < 0) {
    echo "监听失败原因 " . socket_strerror($ret) . "\n";
}
do {
//接收命令
    if (($msgsock = @socket_accept($sock)) < 0) {
        echo "命令接收失败原因: " . socket_strerror($msgsock) . "\n";
        break;
    }
    $msg = "\nPHP Test Server. \n" .
        "用quit,shutdown,sun...等命令测试.\n";
        
   
    @socket_write($msgsock, $msg, strlen($msg));
    do {
        if (false === ($buf = @socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
            echo "socket_read() failed: reason: " . socket_strerror($ret) . "\n";
            break 2;
        }
        if (!$buf = trim($buf)) {
            continue;
        }
        if ($buf == 'quit') {
            break;
        }
        if ($buf == 'shutdown') {
            socket_close($msgsock);
            break 2;
        }
        if ($buf == 'sun') {
         echo'what are you doing?';
        }
        $talkback = "Backinformation : '$buf'.\n";
        socket_write($msgsock, $talkback, strlen($talkback));
        echo "$buf\n";
    } while (true);
    socket_close($msgsock);
} while (true);
socket_close($sock);
?>


Client.php

<?php
error_reporting(E_ALL);
//端口111
$service_port = 111;
//本地
$address = 'localhost';
//创建 TCP/IP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0) {
    echo "socket创建失败原因: " . socket_strerror($socket) . "\n";
} else {
    echo "OK,HE HE.\n";
}
$result = socket_connect($socket, $address, $service_port);
if ($result < 0) {
    echo "SOCKET连接失败原因: ($result) " . socket_strerror($result) . "\n";
} else {
    echo "OK.\n";
}
//发送命令
$in = "HEAD / HTTP/1.1\r\n";
$in .= "Connection: Close\r\n\r\n";
$out = '';*/
echo "Send Command..........";
$in = "sun\n";
socket_write($socket, $in, strlen($in));
echo "OK.\n";
echo "Reading Backinformatin:\n\n";
while ($out = socket_read($socket, 2048)) {
    echo $out;
}
echo "Close socket........";
socket_close($socket);
echo "OK,He He.\n\n";




这两段代码是简单介绍用PHP实现客户端和服务端的通信
client.php
server.php
具体操作,在DOS下用PHP命令打开SERVER,处于监听状态..
再打开一个DOS窗口,用PHP命令打开CLIENT,会得到服务端的回应....
如果你看懂了,现在你可以关闭你的阿帕奇了,打开端口为80,用这程序实现打开一个网站的首页..留给还不会的人思考..

作者: lxylxy888666   发布时间: 2008-09-26

等了好久!我终于买到了这本书 !太棒了!  代码之美Beautiful Code(中文版)  http://auction1.taobao.com/auction/item_detail-0db2-91d884bc54c52a016795759be2163d08.jhtml

作者: 学习代码   发布时间: 2008-09-28

你的 client.php
server.php
  代码都是一样的

作者: baker95935   发布时间: 2008-10-10

我以为没人看,竟然有人看到!感动啊

作者: lxylxy888666   发布时间: 2008-10-10

server.php文件中
if (false === ($buf = @socket_read($msgsock, 2048, PHP_NORMAL_READ))) {
这句话MS不应该指定PHP_NORMAL_READ
当php版本大于4.1.0后运行本程序会出错

作者: ironcrane   发布时间: 2008-10-24

我不已经抑制了吗,是没有问题的

作者: lxylxy888666   发布时间: 2008-10-26

我执行的时候报了这两个错。
Warning: socket_bind() [function.socket-bind]: unable to bind address [0]: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次。 in E:\xampp\htdocs\socket\Server.php on line 27

Warning: socket_listen() [function.socket-listen]: unable to listen on socket [0]: 提供了一个无效的参数。 in E:\xampp\htdocs\socket\Server.php on line 35

作者: yynet   发布时间: 2009-08-05

yynet


换个端口试

作者: jfk0514   发布时间: 2009-08-17

牛皮癣 手足癣 湿疹 晒伤 脱发 腋臭 过敏性鼻炎 红眼病 近视眼 青光眼 非主流QQ日志

作者: 杰宇奕   发布时间: 2009-09-27

时时彩稳赚群
日收入100-500元
提供全天稳定计划
保证日赚100-500元
可进群观察3天
群号:4749267  1对1指导 保教保会
时时彩稳赚群
日收入100-500元
提供全天稳定计划
保证日赚100-500元
可进群观察3天
群号:4749267  1对1指导 保教保会
后一计划
1006-48至1006-51期 五码【75649】 2期中 (1006-49期开 82617)
1006-50至1006-53期 五码【14657】 1期中 (1006-50期开 74807)
1006-51至1006-54期 五码【23471】 4期中 (1006-54期开 54253)
1006-55至1006-58期 五码【37290】 1期中 (1006-55期开 53099)
1006-56至1006-59期 五码【28945】 1期中 (1006-56期开 12525)
1006-57至1006-60期 五码【84635】 1期中 (1006-57期开 52725)
1006-58至1006-61期 五码【24753】 2期中 (1006-59期开 69624)
1006-60至1006-63期 五码【12807】 1期中 (1006-60期开 78422)
1006-61至1006-64期 五码【38940】 1期中 (1006-61期开 60580)
1006-62至1006-65期 五码【87462】 3期中 (1006-64期开 54782)
1006-65至1006-68期 五码【58192】 4期中 (1006-68期开 02912)
1006-69至1006-72期 五码【89743】 1期中 (1006-69期开 64863)
70-01期 五码【60352】 1期中 (70期开 26663)
71-02期 五码【23049】 1期中 (71期开 82682)
共125个计划,正确124,错误1,正确率99.20%。
最大连对108,平均连对62,当前连对108。
最大连错1,平均连错1,当前连错0
后二计划
1006-44至1006-47期 复式七码【5167409】 1期中 (1006-44期开98270)
1006-45至1006-48期 复式七码【1563480】 3期中 (1006-47期开00440)
1006-48至1006-51期 复式七码【6318429】 4期中 (1006-51期开22618)
1006-52至1006-55期 复式七码【2197034】 2期中 (1006-53期开50530)
1006-54至1006-57期 复式七码【3065429】 1期中 (1006-54期开54253)
1006-55至1006-58期 复式七码【6701298】 4期中 (1006-58期开81396)
1006-59至1006-62期 复式七码【5298601】 3期中 (1006-61期开60580)
1006-62至1006-65期 复式七码【6214780】 3期中 (1006-64期开54782)
1006-65至1006-68期 复式七码【3275610】 2期中 (1006-66期开46370)
1006-67至1006-70期 复式七码【1360745】 3期中 (1006-69期开64863)
共107个计划,正确103,错误4,正确率96.26%。
最大连对37,平均连对21,当前连对20。
最大连错1,平均连错1,当前连错0
后三
1006-32至1006-37期 万能七码【0156789】 4期中 (1006-35期开39616)
1006-36至1006-41期 万能七码【0123489】 4期中 (1006-39期开89814)
1006-40至1006-45期 万能七码【0123489】 1期中 (1006-40期开15839)
1006-41至1006-46期 万能七码【1234567】 2期中 (1006-42期开31512)
1006-43至1006-48期 万能七码【0345679】 1期中 (1006-43期开53496)
1006-44至1006-49期 万能七码【0156789】 2期中 (1006-45期开35655)
1006-46至1006-51期 万能七码【0245678】 2期中 (1006-47期开00440)
1006-48至1006-53期 万能七码【0345679】 1期中 (1006-48期开22470)
1006-49至1006-54期 万能七码【0345679】 4期中 (1006-52期开23050)
1006-53至1006-58期 万能七码【2356789】 2期中 (1006-54期开54253)
1006-55至1006-60期 万能七码【0245678】 2期中 (1006-56期开12525)
1006-57至1006-62期 万能七码【0123489】 4期中 (1006-60期开78422)

重庆时时彩-后三组选(自定义-万能七码6期计划)
------------------------------------------
共139个计划,正确135,错误4,正确率97.12%。
最大连对99,平均连对27,当前连对2。
最大连错1,平均连错1,当前连错0。
------------------------------------------

作者: 琨凡城   发布时间: 2009-10-07