php的socket编程

一、socket

socket的英文原义是“孔”或“插座”。作为4BDS UNIX的进程通信机制,取后一种意思。通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

以上内容摘自百度百科

说白了就是服务器开放一个服务,然后客户端去访问。接下来我们来实现一个获取服务器时间的服务端和客户端

二、服务器编码

<?php
/**
 * 服务器端代码
 *
 * @author 趴在树上的猪
 *
 */

//确保脚本一直运行
set_time_limit(0);
//设置IP和端口号
$address = "192.168.1.212";//改成自己的ip
$port = 10001; //自定义但最好在1024以上
/**
 * 创建一个SOCKET
 * AF_INET ipv4, AF_INET6 ipv6 ,AF_UNIX local
 * SOCK_STREAM tcp,SOCK_DGRAM udp 。。。
 */
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

//绑定到socket端口
$result = socket_bind($sock, $address, $port);
//开始监听
$result = socket_listen($sock, 4);
echo "listen on $address:$port ... ";
do {

  //接收连接请求
  $msgsock = socket_accept($sock);

  //读取客户端数据
  echo "Read \n";

  $buf = socket_read($msgsock, 8192);
  echo "Received msg: $buf   \n";
  $msg = date("Y-m-d H:i:s");

  socket_write($msgsock, $msg, strlen($msg));
  socket_close($msgsock);
} while (true);
socket_close($sock);

三、客户端代码

<?php

/**
 * 客户端代码
 *
 * @author 趴在树上的猪
 */
set_time_limit(0);

$host = "192.168.1.212";
$port = 10001;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) ;

$connection = socket_connect($socket, $host, $port) ;

socket_write($socket, "what's the time");
while ($buff = socket_read($socket, 1024)) {
  echo("Now server date is:" . $buff . " local date ".date("Y-m-d H:i:s",time())."\n");
}
socket_close($socket);

四、其他socket函数

socket_accept() 接受一个Socket连接
socket_bind() 把socket绑定在一个IP地址和端口上
socket_clear_error() 清除socket的错误或最后的错误代码
socket_close() 关闭一个socket资源
socket_connect() 开始一个socket连接
socket_create_listen() 在指定端口打开一个socket监听
socket_create_pair() 产生一对没有差别的socket到一个数组里
socket_create() 产生一个socket,相当于产生一个socket的数据结构
socket_get_option() 获取socket选项
socket_getpeername() 获取远程类似主机的ip地址
socket_getsockname() 获取本地socket的ip地址
socket_iovec_add() 添加一个新的向量到一个分散/聚合的数组
socket_iovec_alloc() 这个函数创建一个能够发送接收读写的iovec数据结构
socket_iovec_delete() 删除一个已分配的iovec
socket_iovec_fetch() 返回指定的iovec资源的数据
socket_iovec_free() 释放一个iovec资源
socket_iovec_set() 设置iovec的数据新值
socket_last_error() 获取当前socket的最后错误代码
socket_listen() 监听由指定socket的所有连接
socket_read() 读取指定长度的数据
socket_readv() 读取从分散/聚合数组过来的数据
socket_recv() 从socket里结束数据到缓存
socket_recvfrom() 接受数据从指定的socket,如果没有指定则默认当前socket
socket_recvmsg() 从iovec里接受消息
socket_select() 多路选择
socket_send() 这个函数发送数据到已连接的socket
socket_sendmsg() 发送消息到socket
socket_sendto() 发送消息到指定地址的socket
socket_set_block() 在socket里设置为块模式
socket_set_nonblock() socket里设置为非块模式
socket_set_option() 设置socket选项
socket_shutdown() 这个函数允许你关闭读、写、或指定的socket
socket_strerror() 返回指定错误号的周详错误
socket_write() 写数据到socket缓存
socket_writev() 写数据到分散/聚合数组

本文固定链接: http://www.qaforcode.net/archives/791 | 猪哥每日一贴

该日志由 趴在树上的猪 于2013年03月06日发表在 php 分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
原创文章转载请注明: php的socket编程 | 猪哥每日一贴
关键字:
【上一篇】
【下一篇】

php的socket编程:等您坐沙发呢!

发表评论


快捷键:Ctrl+Enter

浙公网安备 33010602001905号