socket 初步使用

   socket分为2个部分,1部分是服务器端,监听某个接口,当有客户端有请求时,自动运行代码。

第二个部分是客户端,来传送数据。

<?php
    //服务器端口
    header(‘Content-type:text/html;Charset=GBK‘);
    //服务器段程序,监听借口,并进行相应的数据处理

    /*
        socket 服务器通信整个过程
        socket_creat
        socket_bind
        socket_listen
        socket_accetp
        socket_read
        socket_write
        socket_close
    */

    //1,创建通信节点
    $socket             = socket_create(AF_INET,SOCK_STREAM,0);
    if(!$socket)
        exit(‘create error : ‘ . socket_strerror(socket_last_error()));

    //2,绑定制定端口
    $ip                 = ‘127.0.0.1‘;
    $port                 = ‘1935‘;
    $res                 = socket_bind($socket,$ip,$port);
    if(!$res)
        exit(‘bind error:‘ . socket_strerror(socket_last_error()));

    //3, 开始监听
    $res                 = socket_listen($socket);
    if(!$res)
        exit(‘listen error ‘ . socket_strerror(socket_last_error()));

    //4,接收一个通信,处理
    do {

        $msgsock         = socket_accept($socket);
        if(!$msgsock)
            exit(‘accetp error:‘ . socket_strerror(socket_last_error()));

        //读出客户端传入的数据
        $msgclient         = socket_read($msgsock, 1024);
        if($msgclient === false)
            exit(‘read error:‘ . socket_strerror(socket_last_error()));

        echo ‘收到客户端数据:‘ . $msgclient;
        //返回信息
        $remsg             = ‘已经收到请求!处理完毕!123‘;
        $res             = socket_write($msgsock, $remsg);
        if($res === false)
            exit(‘write error :‘ . socket_strerror(socket_last_error()));
        //相关操作
        echo ‘正在进行操作...‘;

        sleep(10);
        //释放资源
        socket_close($msgsock);

    }while(true);

    //5,释放资源
    socket_close($socket);

//触发端口,让服务器程序运行,端口设置为 1935
    //初始化
    $ip             = ‘127.0.0.1‘;
    $port             = ‘1935‘;
    /*
        socket链接整个过程
        1,socket_create
        第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置AF_INET;
        第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM、原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部);
        第三个参数指定应用程序所使用的通信协议。此参数可以指定单个协议系列中的不同传输协议。在Internet通讯域中,此参数一般取值为0,系统会根据套接字的类型决定应使用的传输层协议。
        2,socket_connect
        3,socket_write
        4,socket_read
        5,socket_close
    */
    //1,创建通信节点
    $socket         = socket_create(AF_INET,SOCK_STREAM,0);
    if($socket === false)
        exit(‘创建节点失败!错误信息:‘ . socket_strerror(socket_last_error()));
    echo ‘创建节点成功,准备链接...‘,‘<br />‘;

    //2,开始链接
    $res             = socket_connect($socket,$ip,$port);
    if (!$res) {
        exit(‘连接节点失败!失败原因:‘ . socket_strerror(socket_last_error()));
    }
    echo ‘链接成功!准备发送....‘,‘<br />‘;

    //3,发送数据
    $buffer         = ‘发送一个请求!‘ . "\r\n";
    $res             = socket_write($socket, $buffer);
    if($res === false)
        exit(‘发送请求失败!失败原因:‘ . socket_strerror(socket_last_error()));

    //4,接受服务器回传信息
    $out             = socket_read($socket, 8192);
    if ($out === false) {
        exit(‘获取服务器回传内容失败!原因:‘ . socket_strerror(socket_last_error()));
    }
    if ($out)
        echo ‘获取到服务器回传内容--><strong style="color:red">‘ . $out . ‘</strong>‘;
    else
        echo ‘服务器没有回传内容!‘;

    //关闭链接
    socket_close($socket);

运行后发现缺点,就是还是单进程的。

当服务器运行速度很慢时候,会造成客户端长时间的等待。不利于用户体验。

目前自己的想法是就要利用php实现多进程来配合使用,多进程的实现为一般有两种方法,一种是使用PHP自带的pcntl_*函数(仅限linux),另一种就是使用popen/proc_open,然后在php内部控制进程数量。

明天进行研究。(linux下使用fork。)

目前只是简单的了解并且使用。

socket 初步使用,布布扣,bubuko.com

时间: 2024-10-19 16:48:43

socket 初步使用的相关文章

python3.x——socket初步

python3.x,socket. 网络请求的本质是socket,俗称套接字. 以udp为例,通俗来讲时,包括五个流程: 客户端: 1 # 通信的五个步骤 2 3 from socket import * 4 5 # 1.选择通信方式 6 udpSocket = socket(AF_INET, SOCK_DGRAM) 7 # 2.对方通信地址 8 sendAddr = ("192.168.10.198", 8080) 9 # 3.写入数据 10 sendData = bytes(inp

ACE的Socket初步

Tcp通信过程一般为如下步骤: 服务器绑定端口,等待客户端连接. 客户端通过服务器的ip和服务器绑定的端口连接服务器. 服务器和客户端通过网络建立一条数据通路,通过这条数据通路进行数据交互. 常用API: 1. ACE_INET_Addr类. ACE"地址"类ACE_Addr的子类,表示TCP/IP和UDP/IP的地址.它通常包含机器的ip和端口信息,通过它可以定位到所通信的进程. 定义方式: ACE_INET_Addr addInfo(3000,"192.168.1.100

java socket初步学习一 ( tcp)

Java socket通信程序: 第一版本: 实现功能: 服务器地址:127.0.0.1  端口:5050 客户机:端口5050 客户端发送字符:“t” 服务器接收到该字符并回复:“r” 流程: 建立java工程,默认在workspace中,udpServer为工程名,此时work/udpServer文件夹 建立类名为server,则此时服务器代码为: package udpServer; import java.io.*; import java.net.*; public class ser

初步理解socket

近期研究下socket,发现自己还是有非常多不明确的地方,索性沉下心来,从最基础開始学习,開始看起,如今对自己的学习做下小小总结,以便和大家分享,如有谬误,敬请指正. 原创文章,转载请注明出处:http://blog.csdn.net/jessonlv TCP/IP 在学习socket之前,先回想下TCP/IP协议. TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,定义了主机怎样连入因特网及数据怎样再它们之间

Pin截获socket系统调用初步分析

Pin截获socket系统调用初步分析 根据为知笔记中上传的Pin tool for tracing system calls,修改代码过滤出socket相关的系统调用,并进行初步的分析.主要有2点: - 过滤socket相关的系统调用 - 分析得到的系统调用参数 过滤socket相关的系统调用 socket编程中与访问网络相关的主要关注socket().accept().然后在PinTool中过滤出这两个系统调用,对他们的参数进行初步的分析.下面先看一下这两个函数: int socket(in

Linux下的socket编程实践(八) Select的限制和poll(并发的初步知识)

select的限制 用select实现的并发服务器,能达到的并发数一般受两方面限制: 1)一个进程能打开的最大文件描述符限制.这可以通过调整内核参数来改变.可以通过ulimit -n(number)来调整或者使用setrlimit函数设置(需要root权限),但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看. 2)select中的fd_set集合容量的限制(FD_SETSIZE,一般为1024),这需要重新编译内核才能改变.

python 之 socket 的初步认识

什么是socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,socket起源于Unix,而Unix/liunx基本哲学之一就是"一切皆文件",都可以用"打开open –> 读写write/read – 关闭close"模式 来操作.Socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭) socket 的常用方法 family(socket家族) so

TCP/IP、Http、Socket的区别

网络由下往上分为 物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层, 三者从本质上来说没有可比性, socket则是对TCP/IP协议的封装和应用(程序员层面上). 也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输, 而HTTP是应用层协议,主要解决如何包装数据. 关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍: “我们在传输数据时,可以只使用(传输

Java基于Socket文件传输示例(转)

最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加快传输的速度.废话少说,先来看服务器端的程序. 1.服务器端 package sterning; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream;