经常有朋友会对php的socket应用充满疑惑,本文就以实例代码作一讲解,希望能对初学php的朋友起到一点帮助作用

具体代码如下:

1.服务器端代码:

<?php
class SocketServer{
private $_port='9000';
private $_address='127.0.0.1';
private $_client_socket_list=array();
public function __set($name,$val){
$this--->$name=$val;
}
private function _showError($error){
exit($error);
}
/**
* 开始进行socket服务器端监听端口
*/
public function start(){
// 创建端口
if (($sock = socket_create ( AF_INET, SOCK_STREAM, SOL_TCP )) === false) {
$this->_showError("socket_create() failed :reason:" . socket_strerror ( socket_last_error () ));
}
// 绑定
if (socket_bind ( $sock, $this->_address, $this->_port ) === false) {
$this->_showError("socket_bind() failed :reason:" . socket_strerror ( socket_last_error ( $sock ) ));
}
// 监听
if (socket_listen ( $sock, 5 ) === false) {
$this->_showError("socket_bind() failed :reason:" . socket_strerror ( socket_last_error ( $sock ) ) );
}
do {
//当有一个客户端连接的时候
if ($client_socket=socket_accept ( $sock )) {
$count = count ( $this->_client_socket_list ) + 1;
//把新来的用户加入 客户端数组里
$this->_client_socket_list[]=$client_socket;
echo "new connection:\r\n";//服务器端输出当前正在连接的客户端数量
echo "current connection:{$count}\r\n";
//接受客户端传过来的字符串
$msg=$this->read($client_socket);
echo "client:{$msg}\r\n";
//服务器向客户端传值
$my_msg="I am fine,think you\r\n";
$this->send($client_socket,$my_msg);
}
/**
* 这段代码给你参考,用来判断是否有客户端主动失去连接
else{
foreach ( $this->_client_socket_list as $socket ) {
$len = socket_recv ($socket, $buffer, 2048, 0 ); // 接受一下客户端信息,如果为0代表断开连接
if ($len < 7) {
//这里写是去连接的客户端业务
}
}
}
*/
}while(true);
}
/**
* 发送数据给客户端
*/
public function send($client_socket,$str){
return socket_write ( $client_socket,$str, strlen ( $str ) );
}
/**
* 从客户端接受数据
*/
public function read($client_socket){
return socket_read ( $client_socket, 8192 );//8192实际代表的接受长度,我用819292表示长一点,这样长一点的字符串也可以接受到,不到8192也没关系,会自动识别
}
}
$socket_server =new SocketServer();
$socket_server->start();//开始监听

2.客户端代码:

<?php
class SocketServer{
private $_port='9000';
private $_address='127.0.0.1';
private $_client_socket_list=array();
public function __set($name,$val){
$this--->$name=$val;
}
private function _showError($error){
exit($error);
}
/**
* 开始进行socket服务器端监听端口
*/
public function start(){
// 创建端口
if (($sock = socket_create ( AF_INET, SOCK_STREAM, SOL_TCP )) === false) {
$this->_showError("socket_create() failed :reason:" . socket_strerror ( socket_last_error () ));
}
// 绑定
if (socket_bind ( $sock, $this->_address, $this->_port ) === false) {
$this->_showError("socket_bind() failed :reason:" . socket_strerror ( socket_last_error ( $sock ) ));
}
// 监听
if (socket_listen ( $sock, 5 ) === false) {
$this->_showError("socket_bind() failed :reason:" . socket_strerror ( socket_last_error ( $sock ) ) );
}
do {
//当有一个客户端连接的时候
if ($client_socket=socket_accept ( $sock )) {
$count = count ( $this->_client_socket_list ) + 1;
//把新来的用户加入 客户端数组里
$this->_client_socket_list[]=$client_socket;
echo "new connection:\r\n";//服务器端输出当前正在连接的客户端数量
echo "current connection:{$count}\r\n";
//接受客户端传过来的字符串
$msg=$this->read($client_socket);
echo "client:{$msg}\r\n";
//服务器向客户端传值
$my_msg="I am fine,think you\r\n";
$this->send($client_socket,$my_msg);
}
/**
* 这段代码给你参考,用来判断是否有客户端主动失去连接
else{
foreach ( $this->_client_socket_list as $socket ) {
$len = socket_recv ($socket, $buffer, 2048, 0 ); // 接受一下客户端信息,如果为0代表断开连接
if ($len < 7) {
//这里写是去连接的客户端业务
}
}
}
*/
}while(true);
}
/**
* 发送数据给客户端
*/
public function send($client_socket,$str){
return socket_write ( $client_socket,$str, strlen ( $str ) );
}
/**
* 从客户端接受数据
*/
public function read($client_socket){
return socket_read ( $client_socket, 8192 );//8192实际代表的接受长度,我用819292表示长一点,这样长一点的字符串也可以接受到,不到8192也没关系,会自动识别
}
}
$socket_server =new SocketServer();
$socket_server->start();//开始监听
注意事项:服务器端请用CLI模式运行,cgi模式会超时,这是新手常喜欢犯的错误。那么什么是CLI模式呢?简单的说就是用命令行去执行,而不要用游览器打开,否则会超时的!

php socket客户端及服务器端应用实例的更多相关文章

  1. Python socket 客户端和服务器端

    connection, address = socket.accept() 调 用accept方法时,socket会时入“waiting”状态.客户请求连接时,方法建立连接并返回服务器.accept方 ...

  2. socket客户端和服务器端

    服务器端: #!/usr/bin/env python #-*- coding:utf-8 -*- import socket sk=socket.socket() sk.bind(('127.0.0 ...

  3. Socket客户端/服务端简单实例

    1.client端 package demo.socket; import java.io.BufferedReader;import java.io.IOException;import java. ...

  4. Socket编程——客户端,服务器端的读写操作

    URL网络编程,最大的特征就是一对一的响应! 1:客户端“写”,服务器端用于“读” package coreBookSocket2; import java.io.InputStreamReader; ...

  5. python--DenyHttp项目(1)--socket编程:客户端与服务器端

    查找了许多资料,实现了客户端与服务器端的连接,通过虚拟机进行测试 服务器端IP:192.168.37.129 端口1122 客户端IP: 192.168.37.1 端口1122 Server: #co ...

  6. 基于TCP的客户端、服务器端socket编程

    一.实验目的 理解tcp传输客户端服务器端通信流程 二.实验平台 MAC OS 三.实验内容 编写TCP服务器套接字程序,程序运行时服务器等待客户的连接,一旦连接成功,则显示客户的IP地址.端口号,并 ...

  7. Win Socket编程原理及简单实例

    [转]http://www.cnblogs.com/tornadomeet/archive/2012/04/11/2442140.html 使用Linux Socket做了小型的分布式,如Linux ...

  8. 架构师养成记--22.客户端与服务器端保持连接的解决方案,netty的ReadTimeoutHandler

    概述 保持客户端与服务器端连接的方案常用的有3种 1.长连接,也就是客户端与服务器端一直保持连接,适用于客户端比较少的情况. 2.定时段连接,比如在某一天的凌晨建立连接,适用于对实时性要求不高的情况. ...

  9. socket 客户端和服务端通信

    客户端要连接服务器:首先要知道服务器的IP地址.而服务器里有很多的应用程序,每一个应用程序对应一个端口号 所以客户端想要与服务器中的某个应用程序进行通信就必须要知道那个应用程序的所在服务器的IP地址, ...

随机推荐

  1. JavaScript 构造函数 prototype属性和_proto_和原型链 constructor属性 apply(),call()和bind() 关键字this

    1.构造函数: 通常构造函数首字母需要大写,主要是为了区别ECMAScript的其它函数.(高程三 P145) 构造函数与其他函数的唯一区别,就在于调用它们的方式不同.只要通过new来调用,任何函数都 ...

  2. python 九九乘法表!小练习

    # 1*1 = 1 # 1*2 = 2 2*2 = 4 # 1*3 = 3 2*3 = 6 3*3 = 9 i = 1 j = 1 for j in range(1,10): for i in ran ...

  3. 十五、oracle 约束

    一.维护数据的完整性数据的完整性用于确保数据库数据遵从一定的商业和逻辑规则,在oracle中,数据完整性可以使用约束.触发器.应用程序(过程.函数)三种方法来实现,在这三种方法中,因为约束易于维护,并 ...

  4. 查看Linux系统文本编码-方便修改ssh编码一致

    首先,Linux系统发行的时候全世界都一样,系统是中文的还是英文的完全取决于你选择的语言包.不同国家的人在安装使用的时候选择属于自己国家的语言包,应用程序中的语言也不是写死的,它根据系统的设置来调用相 ...

  5. 用http-server 创建node.js 静态服务器

    今天做一本书上的例子,结果代码不能正常运行,查询了一下,是语法过时了,书其实是新买的,出版不久. 过时代码如下 var connect=require('connect'); connect.crea ...

  6. Class.forName和ClassLoader.loadClass的比较

    文章出处:http://blog.csdn.net/wikijava/article/details/5576043 Class的装载分了三个阶段,loading,linking和initializi ...

  7. wordpress建站过程2——结构

    开始wordpress之前,我们需要了解,wordpress的结构和调用方式. 当一个wordpress开始之后,他会读取[当前主题]的index.php.所以一旦主题切换了,它读的就是其他主题的in ...

  8. The Accomodation of Students(判断二分图以及求二分图最大匹配)

    The Accomodation of Students Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d &a ...

  9. android抓日志

    1. adb logcat -c 清楚以前的日志 adb logcat -s 过滤 adb logcat -s *:E adb logcat -v 指定输出的格式 adb logcat -v brie ...

  10. hdu_5742_It's All In The Mind

    题目链接:hdu_5742_It's All In The Mind 题意: 有一个部分的数列,让你找一个满足他给的三个条件的数列,使前两个数的和除这个数列的sum最大 题解: xjb贪心一下就行了. ...