php socket编程实例
因为用到客户端程序与网页三方支付接口交互,我觉得可以这样来简单实现,在三方支付回调页面中放一个socket服务端,客户端程序与这个socket服务端进行交互,以此来进行最终业务逻辑处理。
php中socket编程,简单实例代码如下:
服务端:
<?php
set_time_limit(0); if(!extension_loaded('sockets')){ //die('服务器未加载sockets扩展'); if(strtoupper(substr(PHP_OS, 3)) == “WIN”) { dl(‘php_sockets.dll’); } else { dl(‘sockets.so’); }
} $sock = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(!$sock){ die('创建socket失败');
} if(!socket_bind($sock,$_SERVER['SERVER_ADDR'],9394)){ die('socket绑定失败');
} if(!socket_listen($sock)){ die('socket监听失败');
} $client_id = 0;
do{ //阻塞,直到有客户端连接 $connection = socket_accept($sock); ++$client_id; printf("Socket connected-$client_id\n"); $buffer='Hello, world!'; socket_write($connection, $buffer . "\n"); do{ $buf =socket_read($connection, 1024, PHP_NORMAL_READ); //退出连接条件 if($buf=="100\n"){ socket_write($connection, 'bye' . "\n"); break; } echo $buf; socket_write($connection, 'copy that' . "\n"); }while(1); socket_close($connection);
}while(1); socket_close($sock);
?>
客户端:
<?php
if(!extension_loaded('sockets')){ //die('服务器未加载sockets扩展'); if(strtoupper(substr(PHP_OS, 3)) == “WIN”) { dl(‘php_sockets.dll’); } else { dl(‘sockets.so’); }
} $socket = socket_create(AF_INET,SOCK_STREAM,SOL_TCP);
if(!$socket){ die('创建socket失败');
} $connection = socket_connect($socket,'localhost', 9394); $send=0;
do{ $buffer = socket_read($socket, 1024, PHP_NORMAL_READ); //退出连接条件 if($buffer=="bye\n"){ break; } echo $buffer; ++$send; socket_write($socket, $send . "\n");
}while(1); socket_close($socket);
?>
与c++程序交互,客户端:
#include <WinSock2.h>
#include <IOSTREAM>
#pragma comment(lib,"ws2_32.lib")
using namespace std; int main(int argc, char* argv[])
{ WSADATA wsaData; WORD wVersionRequested=MAKEWORD(2,2); int err = WSAStartup(wVersionRequested,&wsaData); if (!err) { cout<<"inital socket success"<<endl; SOCKET sock = WSASocket(AF_INET,SOCK_STREAM,0,NULL,0,WSA_FLAG_OVERLAPPED); if (sock != INVALID_SOCKET) { cout<<"create socket success"<<endl; SOCKADDR_IN addr; addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); addr.sin_family=AF_INET; addr.sin_port=htons(9394); int errcon = connect(sock,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if (errcon == SOCKET_ERROR) { cout<<"connection failed:"<<WSAGetLastError()<<endl; closesocket(sock); WSACleanup(); return -1; } cout<<"connection success"<<endl; char sendBuf[1024]={0}; char recvBuf[1024]={0}; recv(sock,recvBuf,1024,0); cout<<recvBuf<<endl; while (TRUE) { cout<<"Please input data:"<<endl; cin>>sendBuf; if (sendBuf==NULL) { break; } send(sock,sendBuf,strlen(sendBuf),0); Sleep(500); recv(sock,recvBuf,1024,0); cout<<recvBuf<<endl; if (!strcmp(recvBuf,"bye")) { cout<<"connection over"<<endl; break; } Sleep(500); } closesocket(sock); WSACleanup(); } else { cout<<"create socket failed"<<endl; WSACleanup(); } } else { cout<<"inital socket failed"<<endl; } return 0;
}
与c/c++程序交互,php服务端读取数据应该用二进制模式读取:
另外,发送数据时,字符串末尾要加\0:
do{ //$buf =socket_read($connection, 1024, PHP_NORMAL_READ); $buf =socket_read($connection, 1024, PHP_BINARY_READ); //退出连接条件 var_dump($buf); if($buf=="quit"){ socket_write($connection, "bye\0"); break; }else if($buf=="isok"){ socket_write($connection, "ok\0"); } echo $buf; socket_write($connection, "copy that\0"); }while(1);
php socket编程实例相关推荐
- Socket编程实例
2019独角兽企业重金招聘Python工程师标准>>> Java具有非常强大的网络应用开发能力.学习网络编程,估计都是从编写一个socket通信开始,从中慢慢掌握网络编程的一点点知识 ...
- C语言 socket编程实例
C语言 socket编程实例 一. 面向连接的流式套接字 C/S 例子 二. 非阻塞的多人聊天服务器端例子 三. 简单的 IPv6 UDP socket编程 四.使用wireshark抓包分析tcp协 ...
- android c++ socket编程,C++ 中 socket编程实例详解
C++ 中 socket编程实例详解 sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW):基于TCP的soc ...
- NIO Socket编程实例
1.阻塞模式实例 NIOUtil类,用来通过SOcket获取BufferedReader和PrintWriter. package IO;import java.io.BufferedReader; ...
- JAVA socket编程实例 转载
事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的多了.Java SDK提供一些相对简单的Api来完成这些工作.Socket ...
- JAVA socket编程实例
2019独角兽企业重金招聘Python工程师标准>>> 事实上网络编程简单的理解就是两台计算机相互通讯数据而已.对于程序员而言,去掌握一种编程接口并使用一种编程模型相对就会显得简单的 ...
- socket编程实例_NIO之网络编程源码阅读
之前分析了ByteBuffer.Channel相关的基本知识,现在对于NIO的基石已经有了基本的了解.不过NIO最突出的特性还是其基于select编程模型的网络编程体验. NIO网络编程通常有两种使用 ...
- LiteOS通信模组教程05-LiteOS的SAL及socket编程实例
1. SAL套接字抽象层 SAL全称Socket Abstract Layer,即套接字抽象层,主要作用是对上层应用提供一层统一的 socket 编程接口,屏蔽底层网络硬件的差异. LiteOS的SA ...
- tcp java实例_实现了基于TCP的Java Socket编程实例代码
实现了基于TCP的Java Socket编程,功能很简单:客户端向服务器端输出一名话"connect",服务器端接收输出到控制台并向客户端输出一名话"Hello" ...
最新文章
- android studio数据库存储数据,如何使用API​​ 23在android studio中的数据库中存储数据?...
- 湘潭大学计算机科学与技术录取分数线,2016年湘潭大学计算机科学与技术专业在湖南录取分数线...
- python turtle画彩虹-python绘制樱花,彩虹旋等
- python实现简单的api接口-Python实现简单的API接口
- git入门:概念、原理、使用
- 32GSSD组建RAID0后对硬盘的加速效果
- 2017-2018-1 20155227 《信息安全系统设计基础》第十三周学习总结
- 查看linux上卸载mysql数据库_linux卸载mysql数据库
- MySQL的安装、启动、停止、卸载
- mysql 驱动包 mysql-connect-java
- SQL分页查询,SQL的LIMIT语句用法,SQL如何实现分页查询,SpringBoot实现分页查询。
- JMeter下载及安装详细教程
- 西门子g120变频器接线图_西门子G120变频器通过IOP-2面板快速启动
- VLAN_Trank使用
- 根据标注点坐标范围计算显示缩放级别zoom自适应显示地图
- 北京交警二环路机动车道“瘦身”,最高“礼遇”骑行人
- Matlab版本对应CUDA
- 单反相机照片用python 脚本添加gps位置信息
- cad-pol:正多边形命令学习
- 人工智能人才缺口达500万,北京大学、天津大学、复旦大学、深圳大学等多所高校布局人工智能人才培养
热门文章
- 阿里P8大能倾力编撰的“Java 进阶面试手册”,助力跳槽外包毕业生秋招收获大厂offer
- JavaScript 常用的转义字符
- 【源码解析】Activity之setResult工作原理
- 对封装继承多态内涵的理解
- 【无线通信】Rayleigh fading和Rician fading
- C_一文读懂推荐系统知识体系(数据派THU 李中杰)
- xml文件不能正常打开
- 间谍软件“飞马”监视超 50 个国家手机用户
- Ubuntu14.04安装火狐浏览器中国版(firefox)实现书签同步
- 【leetcode】1046.有一堆石头,每块石头的重量都是正整数