Home > Backend Development > PHP Tutorial > phpsocket客户端以及服务器例证

phpsocket客户端以及服务器例证

WBOY
Release: 2016-06-13 12:00:07
Original
954 people have browsed it

phpsocket客户端以及服务器例子

一个菜鸟朋友,突然问了我这个问题...现在稍稍有点时间,就写了一个简单的例子给他,顺便贴上来

服务器端:

<?php /** * @author 邹颢	[email&#160;protected] */class SocketServer{	private $_port=&#39;9000&#39;;	private $_address=&#39;127.0.0.1&#39;;	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 start();//开始监听
Copy after login
Copy after login

客户端:

<?php /** * @author 邹颢	[email&#160;protected] */class SocketServer{	private $_port=&#39;9000&#39;;	private $_address=&#39;127.0.0.1&#39;;	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 start();//开始监听
Copy after login
Copy after login

注意事项:服务器端请用CLI模式运行,cgi模式会超时,新手常喜欢犯的错误.什么是CLI模式,简单的说就是用命令行去执行,而不要用游览器打开,否则会超时的
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template