phpsockethttp
① php如何使用socket发送邮件,知识要点是什么
需要了解一下发送邮件的协议 如 smtp, emstp 是如何会话的,邮件格式,和邮件编码规则
当然最好还是要了解一下 socket 通信,若这些都知道的话,那剩下编码应不是问题了
邮件编码和格式可以参考 RFC821,RFC1869, RFC2821 等相关文档, 里面有详细的说明
文档可到
http://www.rfc.net
http://www.ietf.org
等网站去找
http://www.cnpaf.net(中国协议分析网)对部分RFC文档进行了翻译,E文不是很好的话可到上面去找找
若只是用的话,不建议自己去写,网上很多成熟开源 如 PHPMailer 等,学习的话可以去练练
② php socket 消息头消息体
给你个地址,上面说的很详细
http://www.2cto.com/kf/201109/102355.html
③ php的curl和socket的区别
不是socket,curl其实是http请求,你就可以直接理解位页面操作连接,一般只支持80端口。 而socket,则是可以支持全部端口的。 socket_create()函数就是创建socket连接,可以用来写socket通讯。
④ 如何用PHP定义socket的包头
$info["path"] = '/index.html';
$info["host"] = '127.0.0.1';
$info["port"]=80;
$data_string= "name=peter";
这个是发送请求,重新定义了http头部,具体信息在函数里修改就可以了。
echo url_post($info, $data_string);
function url_post($info, $data_string){
$request = '';
$request.="POST ".$info["path"]." HTTP/1.1\n";
$request.="Host: ".$info["host"]."\n";
//$request.="Referer: $referrer\n";
//$request.="Content-type: application/x-www-form-urlencoded\n";
$request.="Content-length: ".strlen($data_string)."\n";
$request.="Connection: close\n";
$request.="\n";
$request.=$data_string."\n";
//echo $request;
$fp = fsockopen($info["host"],$info["port"]);
fputs($fp, $request);
$result = '';
while(!feof($fp)) {
$result .= fgets($fp, 128);
}
fclose($fp);
return $result;
}
⑤ PHP 求助,SOCKET收不到响应
没用过php的socket,不过查看socket_read的手册的时候,看到下面有些人对于win上面的socket的讨论,你可以看看:
http://www.php.net/manual/zh/function.socket-read.php
里面提到一个bug:
https://bugs.php.net/bug.php?id=21197
你可以在socket_read最后加上:PHP_NORMAL_READ这个参数试试:
while($out = socket_read($socket, 2048,PHP_NORMAL_READ))
⑥ php的curl和socket的区别
不是socket,curl其实是http请求,你就可以直接理解位页面操作连接,一般只支持80端口。 而socket,则是可以支持全部端口的。 socket_create()函数就是创建socket连接,可以用来写socket通讯。
⑦ php可不可以socket通信长连接,不断开,然后实现多次通讯
当然可以,我都已经做过udp socket云端门禁管理系统,服务器socket监控设备连接状态,设备通过发送心跳包来维持连接,从而实现长连接,更多详情http://www.100txy.com/article/54.html
⑧ 如何查看php进程请求的socket详情
PHP使用socket发送HTTP请求的方法,具体如下:
socket方式:
$socket=socket_create(AF_INET,SOCK_STREAM,SOL_TCP);//socket_set_option($socket,SOL_SOCKET,SO_SNDTIMEO,array("sec"=>20,"usec"=>0));socket_connect($socket,'www..com',80);//里面的换行代表 注意拷贝的代码后面可能有空格$http=<<<eof
GET/HTTP/1.0
Accept:*/*
User-Agent:Lowell-Agent
Host:www..com
Connection:Close
eof;
socket_write($socket,$http,strlen($http));while($str=socket_read($socket,1024))
{
echo$str;
}
socket_close($socket);
fsockopen方式:
$fp=fsockopen("www..com",80,$errno,$errstr,30);if(!$fp){
echo"$errstr($errno)<br/> ";
}else{
$out="GET/HTTP/1.1 ";
$out.="Host:www..com ";
$out.="Connection:Close ";
fwrite($fp,$http);
while(!feof($fp)){
echofgets($fp,128);
}
fclose($fp);
}
原始socket方式:
$fp=stream_socket_client("tcp://www..com:80",$errno,$errstr,30);if(!$fp){
echo"$errstr($errno)<br/> ";
}else{
$http=<<<eof
GET/HTTP/1.0
Accept:*/*
User-Agent:Lowell-Agent
Host:www..com
Connection:Close
eof;
fwrite($fp,$http);
while(!feof($fp)){
echofgets($fp,1024);
}
fclose($fp);
}
stream方式(get):
$http=<<<eof
Host:www..com
User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64;rv:27.0)Gecko/20100101Firefox/27.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Cookie:BAIDUID=:FG=1;BDUSS=lF--FPnkfhTU;BAIDUPSID=;BD_UPN=13314352;BD_HOME=1;H_PS_PSSID=10047_1435_10874_10212_10501_10496_10753_10796_10219_10355_10666_10597_10095_10658_10442_10700_10460_10360_10618;sug=3;sugstore=0;ORIGIN=2;bdime=0Connection:keep-alive
Cache-Control:max-age=0
eof;
$hdrs=array(
'http'=>array(
'header'=>$http,
'timeout'=>1,//超时秒
'method'=>'GET',//默认方式
'protocol_version'=>'1.1',//默认为1.0),
);
//参数格式参考http://php.net/manual/zh/context.http.php//curl方式的格式可以参考;http://php.net/manual/zh/context.curl.php$context=stream_context_create($hdrs);
echofile_get_contents('http://www..com',0,$context);stream方式post:
$postdata=http_build_query(array('act'=>'save','id'=>387171));$http=<<<eof
Host:www..com
User-Agent:Mozilla/5.0(WindowsNT6.1;WOW64;rv:27.0)Gecko/20100101Firefox/27.0Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language:zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3Content-Type:application/x-www-form-urlencoded;charset=UTF-8Cookie:BAIDUID=:FG=1;BDUSS=lF--FPnkfhTU;BAIDUPSID=;BD_UPN=13314352;BD_HOME=1;H_PS_PSSID=10047_1435_10874_10212_10501_10496_10753_10796_10219_10355_10666_10597_10095_10658_10442_10700_10460_10360_10618;sug=3;sugstore=0;ORIGIN=2;bdime=0Connection:keep-alive
Cache-Control:max-age=0
eof;
#注意post方式需要增加Content-Type
$hdrs=array(
'http'=>array(
'header'=>$http,
'timeout'=>1,//超时秒
'method'=>'POST',
'content'=>$postdata,
'protocol_version'=>'1.1',//默认为1.0),
);
//参数格式参考http://php.net/manual/zh/context.http.php//curl方式的格式可以参考;http://php.net/manual/zh/context.curl.php$context=stream_context_create($hdrs);
echofile_get_contents('http://test.cm/song.php',0,$context);
⑨ 如何在php socket服务器中对post进行相应
php的socket直接拿了报文体,本身socket拿到的数据是一段完整的报文,里面有包含协议与请求方式在内的所有传输层的数据,弊端是不能直接调用。你要用php做的话用$_POST走http协议吧