一、什么是套接字

源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( ($socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
echo "socket_create() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10;
} //将 套接字 绑定到端口
if (socket_bind($socket, $address, $port) === false) {
echo "socket_bind() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10;
} //允许其它 套接字 进行连接
if (socket_listen($socket, 5) === false) {
echo "socket_bind() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10;
} do {
//等待连接
if (($msgsocket = socket_accept($socket)) === false) {
echo "socket_accepty() failed: ", socket_strerror(socket_last_error($socket)), $chr_13_10;
break;
}
//读取客户端的信息
echo 'client message: ',$chr_13_10;
$buffer = socket_read($msgsocket, 8192);
echo $buffer,$chr_13_10;
//将读取到的信息,返回给客户端
if (false === socket_write($msgsocket, $buffer, strlen($buffer))) {
echo "socket_write() failed: ", socket_strerror(socket_last_error($msgsocket)), $chr_13_10;
}
//关闭本次连接
socket_close($msgsocket);
} while(true); //关闭 套接字
socket_close($socket);

客户端代码: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($socket)), $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连接进行编程所需的常见套接字接口函数

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

  1. PHP简单socket编程

    今天再看一点邮件发送的功能,所以了解一下socket变成,看到了一篇不错的文章,转发过来做个笔记吧. 原文链接:http://www.cnblogs.com/thinksasa/archive/201 ...

  2. boost 编译 asio 程序,简单socket 编程

    自己第一次玩boost,对C++也非常不熟悉,记录一下自己的学习过程. 安装编译 boost 包解压到/opt下 tar -zxvf /media/C06EDE596EDE47B4/mnt/boost ...

  3. 基于java的简单Socket编程

    1TCP协议与UDP协议     1.1 TCP               TCP是(Tranfer Control Protocol)的简称,是一种面向连接的保证可靠传输的协议.通过TCP协议传输 ...

  4. Python之简单Socket编程

    Socket编程这块儿还是比较重要的,记录一下:实现服务器端和客户端通信(客户端发送系统指令,如ipconfig等,服务器端执行该指令,然后将指令返回结果给客户端再传过去,设置一次最多直接收1024字 ...

  5. 简单socket()编程

    客户端: 1.socket( int af, int type, int protocol) socket()函数用于根据指定的地址族.数据类型和协议来分配一个套接口的描述字及其所用的资源.如果协议p ...

  6. Linux下的C Socket编程 -- server端的简单示例

    Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...

  7. Socket编程实践(2) Socket API 与 简单例程

    在本篇文章中,先介绍一下Socket编程的一些API,然后利用这些API实现一个客户端-服务器模型的一个简单通信例程.该例子中,服务器接收到客户端的信息后,将信息重新发送给客户端. socket()函 ...

  8. C# socket编程实践——支持广播的简单socket服务器

    在上篇博客简单理解socket写完之后我就希望写出一个websocket的服务器了,但是一路困难重重,还是从基础开始吧,先搞定C# socket编程基本知识,写一个支持广播的简单server/clie ...

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

    示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息:这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文章中,会依次记录套接字的同步和异 ...

随机推荐

  1. c# 异步( Async ) 不是多线程

    c# 异步( Async ) 不是多线程   误解 async 在调试 xxxxAsync() 方法的时候,常常会看到调试器界面中会多出一些线程,直觉上误认为 Async 冠名的函数是多线程. 对于 ...

  2. 湖南师范大学计算机基础课网络教学平台 版本 V2.0(2017.9.18)

    湖南师范大学计算机基础课网络教学平台 版本 V2.0(2017.9.18) 开发环境: 开发工具:VS2013,数据库:Sqlserver2012 开发语言:Asp.net MVC5 ,界面UI:jq ...

  3. 跨域访问MVC

    using MvcApp.Filters; using System; using System.Collections.Generic; using System.Linq; using Syste ...

  4. 把时间戳转换为 datatime 格式

    使用time timeStamp = 1381419600 timeArray = time.localtime(timeStamp) otherStyleTime = time.strftime(& ...

  5. linux 下 shell脚本报错:-bash: ./build.sh: /bin/sh^M: bad interpreter: No such file or directory

    主要原因是build.sh是在windows下编辑然后上传到linux系统里执行的..sh文件的格式为dos格式.而linux只能执行格式为unix格式的脚本. 我们可以通过vi编辑器来查看文件的fo ...

  6. PHP 结合 Boostrap 结合 js 实现学生列表删除编辑以及搜索功能(完结)

    这个自己的小项目要先告一段落了.可能还有许多bug.请见谅 删除学生功能 PHP: // 这里是通过前端代码HTML中的 url 传过来的,用 $_GET 来获取(相关HTML代码可以看一下到主页看一 ...

  7. MySQL Lock--gap before rec insert intention waiting

    在事务插入数据过程中,为防止其他事务向索引上该位置插入数据,会在插入之前先申请插入意向范围锁,而如果申请插入意向范围锁被阻塞,则事务处于gap before rec insert intention ...

  8. keil5工程移植到IAR工程

    keil5工程移植到IAR工程 一. 软件版本 MDK-ARM Professional  Version: 5.14.0.0 IAR 8.1 移植工程:基于正点原子开发板建立的STM32F407ZG ...

  9. 自定义Lombok注解

    Java 是一门"繁琐"的语言,使用 Lombok 可以显著地减少样板代码.比如使用 @Getter 注解可以为你的私有属性创建 get 方法. 源代码 @Getter priva ...

  10. Eclips+ADT+SDK构建android开发环境及android自动化测试开发环境

    一. 需要用到的包: 1.adt-bundle-windows-x86_64-20140702.zip+JDK+ant 2.ant下载地址:http://ant.apache.org/bindownl ...