2023-03-15 05:48来源:m.sf1369.com作者:宇宇
我觉得你服务器这段代码有问题,监听套接字的函数应该放在while循环中才对。
另外php不支持多线程的话,那就不能发挥套接字的功能了,建议用高级语言,比如java,c++写套接字程序。
如果没有装socket扩展,先安装socket扩展
扩展安装好后,就可以通过调用扩展提供的接口创建socket
具体接口看官方文档:网页链接
/*********************************************************
发送trackback程序
参数,主机地址,标题,这篇文章的地址,内容,站点名称
*********************************************************/
function sendTrackback($host,$title,$url,$excerpt,$blog_name) {
$buf=;
$host = str_replace('http://', '', $host);
$path = explode('/', $host);
$host = $path[0];
$host_array=explode(':', $host);
$host=$host_array[0];
if(empty($host_array[1])){
$port=80;
}else{
$port=$host_array[1];
}
unset($path[0]);
$path = '/' . implode('/', $path);
$excerpt = cn_substr($excerpt,252);
$fp = @fsockopen($host, $port, $errno, $errstr, 30);
if(!$fp) {
Return false;
}
$query = 'title=' . rawurlencode($title);
$query .= '&url=' . rawurlencode($url);
$query .= '&excerpt=' . rawurlencode($excerpt);
$query .= '&blog_name=' . rawurlencode($blog_name);
$out = 'POST ' . $path . ' HTTP/1.1' . \r\n;
$out .= 'Host: ' . $host . \r\n;
$out .= 'Connection: close' . \r\n;
$out .= 'Content-Length: ' . strlen($query) . \r\n;
$out .= 'Content-Type: application/x-www-form-urlencoded; charset=iso-8859-1' . \r\n\r\n;
$out .= $query . \r\n;
fwrite($fp, $out);
while (!feof($fp))
$buf .= fgets($fp,128);
fclose($fp);
$arr=explode(<error>,$buf);
$return_num=intval(substr($arr[1], 0, 1));
if($return_num==0){
return 发送成功 ;
}else{
$arr2=explode(message,$buf);
$return_msg=str_replace(>, , $arr2[1]);
$return_msg=str_replace(</, , $return_msg);
return 发送失败:.$return_msg;
}
}
原理上没有区别,就是在Tcp上一层。自己封装通信信息,实现上,当然就有语法不同了,还有php的socket有一个额外的包
要使用扩展必须php已经安装了这个扩展,在windows下,下载php_socket.dll放到apache文件目录下的ext目录下,修改php.ini的文件,找到extension=php_socket.dll这一行,把前面的;去掉,若没找到则添加,再重启。在linux下需要编译安装,再打开配置文件添加extension = php_socket.so
使用socket_read函数,在socket_write($socket,$file);这句话以后使用,
如
$buf = socket_read($socket,8192);
echo Received msg: $buf \n;
注意这里使用的套接字必须与上面socket_write使用的保持一致,如果你认为有延迟的话,那你可以加上一个for 或while语句进行封装
SOCKET是TCP/IP协议开发API,譬如C/S架构的TCP协议,其服务器(带有侦听sokect)与客户端通讯,原则上与双方所采用的编程语言无关。你可以试试,用C语言写一个服务器程序,然后客户端用php来写,但双方发送的数据格式要约定好。最简单的是客户端与服务器方连接一下试试,服务器方定有反应。当然,两台计算机之间至少要PING通IP地址。
因为只有调用了accept客户端才能连上,你如果accept下面接一个循环,那么第二个用户不是说能不能进这个循环,而是连不进……此时只有第一个用户break出了循环,然后程序回头再调用accept,...,如果你想学习更多的关于php相关的知识,可以在后盾人找找教学视频看看学习一下,不就会了