专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »PHP教程 » phpsocket:php Socket 基础 »正文

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

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: