php中使用socket在服务器端主要使用这么几个函数:

1/$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)创建一个socket

2/socket_bind($socket,$host,$ip)绑定

当用socket()函数创建套接字以后,套接字在名称空间(网络地址族)中存在,但没有任何地址给它赋值。bind()把用addr指定的地址赋值给用文件描述符代表的套接字sockfdaddrlen指定了以addr所指向的地址结构体的字节长度。一般来说,该操作称为“给套接字命名”。

通常,在一个SOCK_STREAM套接字接收连接之前,必须通过bind()函数用本地地址为套接字命名。

3/socket_listen($sock,4)监听

listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。 listen函数在一般在调用bind之后-调用accept之前调用

4/socket_accept($sock)

accept()系统调用主要用在基于连接的套接字类型,比如SOCK_STREAM和SOCK_SEQPACKET。它提取出所监听套接字的等待连接队列中第一个连接请求创建一个新的套接字,并返回指向该套接字的文件描述符。新建立的套接字不在监听状态,原来所监听的套接字也不受该系统调用的影响。

<?php
$ip = '127.0.0.1';
$port = 1919;
set_time_limit(0);
if(($sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP))<0){
    echo 'socket_create()失败的原因是:'.socket_strerror($sock).'\n';
}
if(($ret = socket_bind($sock,$ip,$port))<0){
    echo 'socket_bind()失败的原因是:'.socket_strerror($ret).'\n';
}
if(($lis = socket_listen($sock,4))<0){
    echo 'socket_listen()失败的原因是:'.socket_strerror($lis).'\n';
}
$count = 0;
do{
    if(($msgsock = socket_accept($sock))<0){
        echo "socket_accept() failed:reason:".socket_strerror($msgsock).'\n';
        break;
    }else{
        $msg = "测试成功!\n";
        socket_write($msgsock,$msg,strlen($msg));
        echo "测试成功了啊\n";
        $buf = socket_read($msgsock,8192);
        $talkback = "收到的信息:$buf\n";
        echo $talkback;
        if(++$count >= 5){
            break;
        };
    }
    socket_close($msgsock);
}while(true);
socket_close($sock);

客户端:

/**
  *    @socket_create        创建
  *    @socket_connect        连接
  *    @socket_write        发送
  *    @socket_read            读取
  *    @socket_close        关闭
  */

<?php
error_reporting(E_ALL);
set_time_limit(0);
echo "<h2>TCP/IP Connection</h2>\n";
$port = 1919;
$ip = '127.0.0.1';

$socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if($socket <0){
    echo "socket创建失败:失败原因:".socket_strerror($socket)."\n";
}else{
    echo "ok.\n";
}
echo "试图连接'$ip'端口'$port'...";
$result = socket_connect($socket,$ip,$port);
if($result < 0){
    echo 'socket连接失败:失败原因:'.socket_strerror($result)."\n";
}else{
    echo "连接OK\n";
}
$in = "Ho\r\n"."first blood \r\n";
$out = '';
if(!socket_write($socket,$in,strlen($in))){
    echo 'socket数据发送失败:原因是:'.socket_strerror($socket)."\n";
}else{
    echo "发送内容成功!\n";
    echo "发送的内容为:<font color='red'>$in</font><br>";
}
while($out == socket_read($socket, 8192)){
    echo "接收服务器回传信息成功!\n";
    echo "接受的内容为:".$out;
    break;
}
echo "关闭socket...\n";
socket_close($socket);
echo "关闭ok\n";

php中socket的使用的更多相关文章

  1. linux中socket的理解

    对linux中socket的理解 一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打开open –> 读写write/read –> ...

  2. 操作系统底层原理与Python中socket解读

    目录 操作系统底层原理 网络通信原理 网络基础架构 局域网与交换机/网络常见术语 OSI七层协议 TCP/IP五层模型讲解 Python中Socket模块解读 TCP协议和UDP协议 操作系统底层原理 ...

  3. python中socket模块详解

    socket模块简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.socket通常被叫做"套接字",用于描述IP地址和端口,是一个通信 ...

  4. Linux查看系统中socket状态

    当我们打开的socket数量很多时,netstat就会变得慢了,有什么办法可以快速查看系统中socket状态? IPv4: $ cat /proc/net/sockstat sockets: used ...

  5. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  6. python中Socket的使用

    说明 前一段时间学习python网络编程,完成简单的通过python实现网络通信的功能.现在,将python中Socket 通信的基本实现过程做一个记录备份. Socket通信 python 中的so ...

  7. 第一篇 网站基础知识 第4章 Java中Socket的用法

    第4章 Java中Socket的用法 4.1 普通Socket的用法 Java中的网络通信是通过Socket实现的,Socket分为ServetSocket和Socket两大类,ServetSocke ...

  8. TCP/IP网络编程中socket的行为

    一. read/write的语义:为什么会阻塞? 先从write说起: #include <unistd.h>ssize_t write(int fd, const void *buf, ...

  9. 浅谈TCP/IP网络编程中socket的行为

    我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...

  10. linux中socket的理解---4

    一.socket 一般来说socket有一个别名也叫做套接字. socket起源于Unix,都可以用“打 开open –> 读写write/read –> 关闭close”模式来操作.So ...

随机推荐

  1. vue实践---vue动态加载组件

    开发中遇到要加载10个或者更多的,类型相同的组件时,如果用普通的 import 引入组件,components注册组件,代码显得太啰嗦了,这时候就需要用到 require.context 动态加载这些 ...

  2. Linux服务器性能日志收集和分析脚本(转)

    最近老大要求分析服务器的性能数据,找到服务器运行的性能瓶颈,结果花了两天时间,写了两个脚本可以生成日志并可以进行数据提取,最终生成数据可以放到excel生成报表.过程中也学到了不少shell编程技术. ...

  3. Python 字符串拼接、格式化输出、深浅复制

    拼接:"+"号(同类型可拼接) >>>li = [1,2] >>>li + li [1,2,1,2] >>>li*2 [1,2 ...

  4. One Person Game(概率+数学)

    There is a very simple and interesting one-person game. You have 3 dice, namelyDie1, Die2 and Die3.  ...

  5. 为什么要对url进行encode

    发现现在几乎所有的网站都对url中的汉字和特殊的字符,进行了urlencode操作,也就是: http://hi.baidu.com/%BE%B2%D0%C4%C0%CF%C8%CB/creat/bl ...

  6. 在线工具集合(新增cron quartz表达式在线生成……)

    缘起 平时工作,须要一些工具.经过一些使用,对照,保留一些比較方便好用的在线工具 工具会持续更新中.. . 在线编译&&反编译  http://www.showmycode.com/ ...

  7. centos 时区正确,时间不对

    centos6.5 里面 时区是 Asia/Shanghai ,但是 时间还是不对,在网上收集了如下做法:好像恢复了~~ (主要过程是:  查看各种设置,然后设置时间,最后更新本机时间,最后保持与时间 ...

  8. SAP basis 二

    使用事务 SMW0 可以在数据库中创建自己的图像.选择选项"二进制数据". 可以按.GIF 格式保存图像. 使用表 SSM_CUST 中的关键字 "START_IMAGE ...

  9. eclipse 修改 JDK中的src.zip的路径

    http://blog.sina.com.cn/s/blog_54a1bca7010112fb.html http://www.douban.com/note/211369821/ 1.点 “wind ...

  10. Sqoop架构以及应用介绍

    本篇文章在具体介绍Sqoop之前,先给大家用一个流程图介绍Hadoop业务的开发流程以及Sqoop在业务当中的实际地位.  如上图所示:在实际的业务当中,我们首先对原始数据集通过MapReduce进行 ...