PHP下socket编程
下面是一些简单的例子,在命令行运行php脚本就行
[命令行运行PHP]PHP中有一个php.exe文件,可以用命令执行PHP脚本。如:D:/php.exe -f F:/test.php ; 可以使用php.exe -h查看更多参数 :
服务器端:
<?php
/**
* 服务器端代码
*
*/
//确保在连接客户端时不会超时
set_time_limit(0);
//设置IP和端口号
$address = "localhost";
$port = 1234; //调试的时候,可以多换端口来测试程序!
//创建一个SOCKET
if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false)
{
echo "socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n";
die;
}
//阻塞模式
if (socket_set_block($sock) == false)
{
echo "socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n";
die;
}
//绑定到socket端口
if (socket_bind($sock, $address, $port) == false)
{
echo "socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n";
die;
}
//开始监听
if (socket_listen($sock, 4) == false)
{
echo "socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n";
die;
}
do
{
if (($msgsock = socket_accept($sock)) === false)
{
echo "socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n";
die;
}
//发到客户端
$msg = "welcome /n";
if (socket_write($msgsock, $msg, strlen($msg)) === false)
{
echo "socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n";
die;
}
echo "读取客户端发来的信息/n";
$buf = socket_read($msgsock, 8192);
echo "收到的信息: $buf /n";
socket_close($msgsock);
} while (true);
socket_close($sock);
?>
客服端
<?php
/**
* 客户端代码
*/
error_reporting(0);
set_time_limit(0);
echo " TCP/IP Connection /n";
$service_port = 10001;
$address = '127.0.0.1';
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false)
{
die;
}
else
{
echo "OK";
}
echo "试图连接 ";
if (socket_connect($socket, $address, $service_port) == false)
{
$error = socket_strerror(socket_last_error());
echo "socket_connect() failed./n","Reason: {$error} /n";
die;
}
else
{
echo "连接OK/n";
}
$in = "Hello World/r/n";
if (socket_write($socket, $in, strlen($in)) === false)
{
echo "socket_write() failed: reason: " . socket_strerror(socket_last_error()) ."/n";
die;
}
else
{
echo "发送到服务器信息成功!/n","发送的内容为: $in /n";
}
$out = "";
while ($out = socket_read($socket, 8192))
{
echo "接受的内容为: ".$out;
}
echo "关闭SOCKET…/n";
socket_close($socket);
echo "关闭OK/n";
?>
下面是我自己的代码:这是一个PHP客户端测试程序,目的是与服务器连接,将一个包体中的内容发给服务器,服务器查询数据库,然后将结果返还给客户端
<?
$clientfd = socket_create(AF_INET, SOCK_STREAM, 0);
if($clientfd == -1)
{
printf("failed to create socket!\n");
}
$server_port = 63214;
$server_addr = "10.1.1.65";
if((socket_connect($clientfd, $server_addr, $server_port)) === false)
{
echo "failed to connect!\n";
die;
}
else
{
echo "succeed to connect!\n";
}
$pkg_len = 18;
$cmd_id = 1;
$user_id =100;
$buf = pack("LLSLL", $pkg_len, 0, $cmd_id, 0, $user_id);
if(socket_write($clientfd, $buf, strlen($buf)) === false)
{
echo "failed to send!\n";
}
else
{
echo "succeed to send message to the server!\n";
if(($result = socket_read($clientfd, 63214)))
{
$res = unpack($result);
echo "succeed to receive data from the server:$server_addr\n";--
echo "the result is :$res[1]\n";
}
else
{
echo "failed to receive data from the server:$server_addr\n";
}
}
PHP下socket编程相关推荐
- Linux下Socket编程
Linux下Socket编程 网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符.Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的S ...
- windows下socket编程GetLastError()函数返回结果与对照表-转
原文地址:http://blog.sina.com.cn/s/blog_4880c4bb0100b6a5.html WSAGetLastError()函数返回结果与对照表: Windows Socke ...
- 一文了解linux下socket编程
一文了解linux下socket编程 文章目录 一文了解linux下socket编程 1 网络编程的相关简述 1.1 引言 1.2 Tcp和Udp简介 1.3 TCP三次握手和四次挥手 1.4 网络编 ...
- LINUX下Socket编程 函数格式详解
你需要了解的一些系统调用: socket() bind() connect() listen() accept() send() recv() sendto() recvfrom() close() ...
- linux下socket编程读写函数
linux下socket编程,实现服务器与客户端的通信之后,在同一个虚拟机上,打开两个shell,一个运行服务器程序,一个运行客户端程序,课相互发送数据. 如果使用的是recv接收函数,当关闭客户端或 ...
- Windows下Socket编程
Windows下Socket编程 构架 创建socket 绑定bind 存储转换函数 监听listen 接收accept 发送send(tcp)/sendto(udp) 接收recv(tcp)/rec ...
- [zz]Linux 下 socket 编程示例
本示例为 Client/Server 结构,通过代码演示 Client 如何建立连接,并向远程端发送数据:Server 端如何侦听系统连接请求,接收请求并建立连接,进而获取客户端发来的数据.代码虽短, ...
- win32下Socket编程(1)
一.win32的socket编程,是socket编程中比较经典也比较基础的一部分,根据传输方式和协议的区别,可以简单的分为TCP传递和UDP传递两种.这篇文章主要是阐述基于TCP的Socket编程. ...
- linux下socket编程(基础参考)
什么是Socket Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序.要学Internet上的TCP/IP网络编程, ...
- 多线程下SOCKET编程
SOCKET编程往往离不开多线程,说到多线程,总的说来还是一个比较复杂的东西,尤其是业务逻辑变得复杂的时候,有时候或者说经常,会弄得人头晕脑胀.但是C#,相对好一点,因为微软封装了,帮我们做很多工作, ...
最新文章
- 08CSS的复合选择器
- 云原生时代,.NET5必将称王!
- 用于RIA的JavaFX 2与HTML5
- python关键词提取_python对文件中的关键词查找替换,实现自动获取配置
- C语言 · 数的读法
- apt-get命令_DBATools中的Get-DbaHelpIndex命令
- IOSday04 UIButton使用
- C语言钩子函数获取键盘事件,(C#)透过键盘钩子获取ScanCode/VkCode
- NXP推出Icode DNA芯片,助力产品防伪鉴定
- GitHub绑定阿里云域名
- P2P流量检测8个方向
- IntelliJ IDEA 整理代码格式 快捷键
- 阿里2019实习生面经
- 100baseT,1000baseX,1000baseTX,1000baseFX分别表示的意思
- jBox,实现批量查询
- 「读书感悟系列」苏世民:我的经验与教训
- Excel插入XactiveX提示出错“不能插入对象”解决
- 2021年化工自动化控制仪表考试报名及化工自动化控制仪表新版试题
- Django实现邮箱注册系统
- vijos 1221 神秘配方 题解
热门文章
- mysql 5.1 备份_mysql 5.1备份到5.0 USING BTREE
- python 移动文件
- android自定义progressbar样式,Android开发中如何实现自定义ProgressBar的样式
- import export php,import与export在node.js中的使用方法
- Java旅游项目线路收藏_基于JavaWeb的旅游项目--详情功能
- java selector 源码_基于selector的源码分析和理解、思想和应用实践
- 网课助手浏览器版怎么更新_MIUI版本更新动态:跨屏协作来袭(第57期)
- java 之持久化和序列化(反序列化)
- ajax在Xss中的利用,XSS高级利用
- 了解CUDA计算(一)