php之简单socket编程

一、什么是套接字

源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。

二、php套接字实例

服务端代码:socket.php

<?php
error_reporting(E_ALL);
set_time_limit(0);
$chr_13_10 = "\r\n"; //回车 换行
//ob_implicit_flush();

$address = ‘127.0.0.1‘;
$port = 10005;
//创建 套接字
if( ($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
    echo "socket_create() failed: ", socket_strerror(socket_last_error()), $chr_13_10;
}

//将 套接字 绑定到端口
if (socket_bind($sock, $address, $port) === false) {
    echo "socket_bind() failed: ", socket_strerror(socket_last_error($sock)), $chr_13_10;
}

//允许其它 套接字 进行连接
if (socket_listen($sock, 5) === false) {
    echo "socket_bind() failed: ", socket_strerror(socket_last_error($sock)), $chr_13_10;
}

do {
    //等待连接
    if (($msgsock = socket_accept($sock)) === false) {
        echo "socket_accepty() failed: ", socket_strerror(socket_last_error($sock)), $chr_13_10;
        break;
    }
    //读取客户端的信息
    echo ‘client message: ‘,$chr_13_10;
    $buffer = socket_read($msgsock, 8192);
    echo $buffer,$chr_13_10;
    //将读取到的信息,返回给客户端
    if (false === socket_write($msgsock, $buffer, strlen($buffer))) {
        echo "socket_write() failed: ", socket_strerror(socket_last_error($sock)), $chr_13_10;
    }
    //关闭本次连接
    socket_close($msgsock);
} while(true);

//关闭 套接字
socket_close($sock);

客户端代码:client.php

<?php
$chr_13_10 = "\r\n"; //回车 换行
$service_port = 10005;
$address = ‘127.0.0.1‘;
//创建 套接字
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
    echo "socket_create() failed: ", socket_strerror(socket_last_error()), $chr_13_10;
} else {
    echo "socket create OK", $chr_13_10;
}
//连接到其它 套接字
$result = socket_connect($socket, $address, $service_port);
if($result === false) {
    echo "socket_connect() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10;
} else {
    echo "socket connect OK", $chr_13_10;
}

$in = "";
if(isset($argv[1])) $in .= $argv[1];
//向已连接的 套接字 写入信息
socket_write($socket, $in, strlen($in));
echo  "socket write OK", $chr_13_10;

echo "Reading response-------------------------->start", $chr_13_10;
$out = "";
//读取已连接的 套接字 发来的信息
while ($out = socket_read($socket, 8192)) {
    echo $out;
}
echo $chr_13_10, "Reading response-------------------------->end", $chr_13_10;

socket_close($socket);
echo "socket close OK",$chr_13_10;

三、代码演示结果

1、打开一个cmd去启动服务端

2、再打开一个cmd去启动客户端

3、查看服务端对应的cmd

四、《HTTP权威指南》中截取的两张图片

1、TCP客户端和服务器通过TCP套接字接口进行通信的流程

2、对TCP连接进行编程所需的常见套接字接口函数

时间: 2024-09-29 23:50:23

php之简单socket编程的相关文章

PHP简单socket编程

今天再看一点邮件发送的功能,所以了解一下socket变成,看到了一篇不错的文章,转发过来做个笔记吧. 原文链接:http://www.cnblogs.com/thinksasa/archive/2013/02/26/2934206.html 文章中的例子已亲测,没有问题... 对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1.         什么是TCP/IP.UDP?2.         Socket在哪里呢?3.  

基于java的简单Socket编程

1TCP协议与UDP协议     1.1 TCP               TCP是(Tranfer Control Protocol)的简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输,得到的是一个顺序的无差错的数据流.发送方和接收方的成对的两个socket之间必须建立连接,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作. TCP的

简单socket()编程

客户端: 1.socket( int af, int type, int protocol) socket()函数用于根据指定的地址族.数据类型和协议来分配一个套接口的描述字及其所用的资源.如果协议protocol未指定(等于0),则使用缺省的连接方式. 对于使用一给定地址族的某一特定套接口,只支持一种协议.但地址族可设为AF_UNSPEC(未指定),这样的话协议参数就要指定了.协议号特定于进行通讯的“通讯域”. SOCK_STREAM 提供有序的.可靠的.双向的和基于连接的字节流,使用带外数据

C#版 Socket编程(最简单的Socket通信功能)

原文://http://blog.csdn.net/linybo/article/details/51141960 示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别. 第一步:用指定的端口号和服务器的ip建立一个EndPoint对像: 第二步:建立一个Socket对像: 第三步:用socket对像的Bind()方法绑定EndPo

Swift和C混合Socket编程实现简单的ping命令

这个是用Mac下的Network Utility工具实现ping命令,用Wireshark抓取的ICMP数据包: 发送ICMP数据包内容 接受ICMP数据包内容 一.icmp结构 要真正了解ping命令实现原理,就要了解ping命令所使用到的TCP/IP协议.ICMP(Internet Control Message,网际控制报文协议)是为网关和目标主机而提供的一种差错控制机制,使它们在遇到差错时能把错误报告给报文源发方.ICMP协议是IP层的 一个协议,但是由于差错报告在发送给报文源发方时可能

socket编程——一个简单的例子(转)

原文地址:http://blog.csdn.net/wind19/article/details/6156339 从一个简单的使用TCP例子开始socket编程,其基本步骤如下: server                                                  client +++++++                                          ++++++++ 创建socket                               

socket编程(一):简单回射C/S程序

服务端代码: //echoSvr.c #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdlib.h> #include <stdio.h> #include <errno.h> #include <str

Linux C Socket编程原理及简单实例

原文:http://www.cnblogs.com/xudong-bupt/archive/2013/12/29/3483059.html 部分转自:http://goodcandle.cnblogs.com/archive/2005/12/10/294652.aspx 1.   什么是TCP/IP.UDP? 2.   Socket在哪里呢? 3.   Socket是什么呢? 4.   有很多的框架,为什么还在从Socket开始? 5.   Linux C Socket简单示例 1.什么是TCP

socket编程:简单TCP服务器/客户端编程

其实对于socket:我们需要理解的是他提供了一种编程概念,利用socket就可以利用系统已经封装好的内部进行通信,我们只需要关注应用层方面的数据控制就OK了. 一. 套接字(socket) socket英文为插座的意思,也就是为用户提供了一个接入某个链路的接口.而在计算机网络中,一个IP地址标识唯一一台主机,而一个端口号标识着主机中唯一一个应用进程,因此"IP+端口号"就可以称之为socket. 两个主机的进程之间要通信,就可以各自建立一个socket,其实可以看做各自提供出来一个&