phpsocket:php Socket 基础来源: 发布时间:星期二, 2008年12月30日 浏览:19次 评论:0
◆ Socket 基础
代码 _close 关闭个资源 _connect 开始个连接 _create_listen 在指定端口打开个监听 _create_pair 产生对没有区别到个里 _create 产生个相当于产生个数据结构 _get_option 获取选项 _getpeername 获取远程类似主机ip地址 _getsockname 获取本地ip地址 _iovec_add 添加个新向量到个分散/聚合 _iovec_alloc 这个创建个能够发送接收读写iovec数据结构 _iovec_delete 删除个已经分配iovec _iovec_fetch 返回指定iovec资源数据 _iovec_free 释放个iovec资源 _iovec_ 设置iovec数据新值 _last_error 获取当前最后代码 _listen 监听由指定所有连接 _read 读取指定长度数据 _readv 读取从分散/聚合过来数据 _recv 从里结束数据到缓存Cache _recvfrom 接受数据从指定如果没有指定则默认当前 _recvmsg 从iovec里接受消息 _select 多路选择 _send 这个发送数据到已连接 _sendmsg 发送消息到 _sendto 发送消息到指定地址 __block 在里设置为块模式 __nonblock 里设置为非块模式 __option 设置选项 _shutdown 这个允许你关闭读、写、或者指定 _strerror 返回指定号详细 _write 写数据到缓存Cache _writev 写数据到分散/聚合 以上所有都是PHP中有关使用这些你必须把你打开如果你没有打开请编辑你php.ini文件去掉下面这行前面注释: extension=php_s.dll 如果你无法去掉注释那么请使用下面代码来加载扩展库: <?php (!extension_loaded(‘s’)) { (strtoupper(substr(PHP_OS, 3)) “WIN”) { dl(‘php_s.dll’); }{ dl(‘s.so’); } } ?> 如果你不知道你是否打开那么你可以使用phpinfo来确定是否打开你通过查看phpinfo信息了解是否打开 查看phpinfo有关信息 ◆ 产生个服务器 现在我们把第个例子进行完善你需要监听个指定并且处理用户连接 <?php $commonProtocol = getprotobyname("tcp"); $ = _create(AF_INET, SOCK_STREAM, $commonProtocol); _bind($, 'localhost', 1337); _listen($); // Accept any incoming connections to the server $connection = _accept($); ($connection){ _write($connection, "You have connected to the ...\n\r"); } ?> 你应该使用你命令提示符来运行这个例子理由是这里将产生个服务器而不是个Web页面如果你尝试使用Web浏览器来运行这个脚本那么很有可能它会超过30秒限时你可以使用下面代码来设置个无限运行时间但是还是建议使用命令提示符来运行 _time_limit(0); 在你命令提示符中对这个脚本进行简单测试: Php.exe example01_server.php 如果你没有在系统环境变量中设置php解释器路径那么你将需要给php.exe指定详细路径当你运行这个服务器端时候你能够通过远程登陆(telnet)方式连接到端口1337来测试这个服务器 上面服务器端有 3个问题:1. 它不能接受多个连接2. 它只完成唯个命令3. 你不能通过Web浏览器连接这个服务器 这个第个问题比较容易解决你可以使用个应用去每次都连接到服务器但是后面问题是你需要使用个Web页面去连接这个服务器这个比较困难你可以让你服务器接受连接然后些数据到客户端(如果它定要写话)关闭连接并且等待下个连接 在上个代码基础上再改进产生下面代码来做你新服务器端: <?php // Set up our $commonProtocol = getprotobyname("tcp"); $ = _create(AF_INET, SOCK_STREAM, $commonProtocol); _bind($, 'localhost', 1337); //_bind 把绑定在个IP地址和端口上 _listen($); // Initialize the buffer $buffer = "NO DATA"; while(true) { // Accept any connections coming in _disibledevent= _read($, 1024, PHP_NORMAL_READ)){ echo(“<p>Data sent was: SOME DATA<br> Response was:” . $buffer . “</p>”); } echo(“<p>Done Reading from Socket</p>”); ?> 这个例子代码演示了客户端连接到服务器客户端读取数据如果这是第时间到达这个循环首次连接这个服务器将发送“NO DATA”返回给客户端如果情况发生了这个客户端在连接的上客户端发送它数据到服务器数据发送给服务器客户端等待响应旦接受到响应那么它将把响应写到屏幕上 0
相关文章读者评论发表评论 |
|