php socket(php socket函数socket_set_option怎么用)

本文目录
- php socket函数socket_set_option怎么用
- 如何查看php进程请求的socket详情
- php socket编程 发送json字符串接不到
- socketphp心跳包和报文区分
- php用socket获得客户端的ip和端口
php socket函数socket_set_option怎么用
php函数bool socket_set_option ( resource $socket , int $level , int $optname , mixed $optval )用法说明:
The socket_set_option() function sets the option specified by the optname parameter, at the specified protocollevel, to the value pointed to by the optval parameter for the socket。
参数说明:
socket
A valid socket resource created with socket_create() or socket_accept().
level
The level parameter specifies the protocol level at which the option resides. For example, to retrieve options at the socket level, a level parameter of SOL_SOCKET would be used. Other levels, such as TCP, can be used by specifying the protocol number of that level. Protocol numbers can be found by using thegetprotobyname() function.
optname
The available socket options are the same as those for the socket_get_option() function.
optval
The option value.
返回值:
成功时返回 TRUE, 或者在失败时返回 FALSE。
例子:
《?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if (!is_resource($socket)) {
echo ’Unable to create socket: ’. socket_strerror(socket_last_error()) . PHP_EOL;
}
if (!socket_set_option($socket, SOL_SOCKET, SO_REUSEADDR, 1)) {
echo ’Unable to set option on socket: ’. socket_strerror(socket_last_error()) . PHP_EOL;
}
if (!socket_bind($socket, ’127.0.0.1’, 1223)) {
echo ’Unable to bind socket: ’. socket_strerror(socket_last_error()) . PHP_EOL;
}
$rval = socket_get_option($socket, SOL_SOCKET, SO_REUSEADDR);
if ($rval === false) {
echo ’Unable to get socket option: ’. socket_strerror(socket_last_error()) . PHP_EOL;
} else if ($rval !== 0) {
echo ’SO_REUSEADDR is set on socket !’ . PHP_EOL;
}
?》
如何查看php进程请求的socket详情
PHP使用socket发送HTTP请求的方法,具体如下:
socket方式:
***隐藏网址***
GET / HTTP/1.0
Accept: */*
User-Agent: Lowell-Agent
Host: www.baidu.com
Connection: Close
eof;
***隐藏网址***
{
echo $str;
}
socket_close($socket);
fsockopen方式:
$fp = fsockopen("www.baidu.com", 80, $errno, $errstr, 30);if (!$fp) {
echo "$errstr ($errno)《br /》\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.baidu.com\r\n";
$out .= "Connection: Close\r\n\r\n";
***隐藏网址***
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
原始socket方式:
$fp = stream_socket_client("tcp://www.baidu.com:80", $errno, $errstr, 30);if (!$fp) {
echo "$errstr ($errno)《br /》\n";
} else {
***隐藏网址***
GET / HTTP/1.0
Accept: */*
User-Agent: Lowell-Agent
Host: www.baidu.com
Connection: Close
eof;
***隐藏网址***
while (!feof($fp)) {
echo fgets($fp, 1024);
}
fclose($fp);
}
stream 方式(get):
***隐藏网址***
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/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=79D98B1AD8436C57B967E111E484F1CD:FG=1; BDUSS=lF-UFFOanFPVG92NmF4U3NiTEoxOFh4YVBCTnZaMUtoTUNhZmxrWThwN25IaUJVQVFBQUFBJCQAAAAAAAAAAAEAAADzo1gKc2lxaW5pYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeR-FPnkfhTU; BAIDUPSID=79D98B1AD8436C57B967E111E484F1CD; 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(
***隐藏网址***
***隐藏网址***
’timeout’=》1, //超时 秒
’method’ =》 ’GET’, //默认方式
’protocol_version’ =》 ’1.1’, //默认为 1.0),
);
***隐藏网址***
***隐藏网址***
***隐藏网址***
Host: www.baidu.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/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=79D98B1AD8436C57B967E111E484F1CD:FG=1; BDUSS=lF-UFFOanFPVG92NmF4U3NiTEoxOFh4YVBCTnZaMUtoTUNhZmxrWThwN25IaUJVQVFBQUFBJCQAAAAAAAAAAAEAAADzo1gKc2lxaW5pYW8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOeR-FPnkfhTU; BAIDUPSID=79D98B1AD8436C57B967E111E484F1CD; 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(
***隐藏网址***
***隐藏网址***
’timeout’=》1, //超时 秒
’method’ =》 ’POST’,
’content’ =》 $postdata,
’protocol_version’ =》 ’1.1’, //默认为 1.0),
);
***隐藏网址***
***隐藏网址***
php socket编程 发送json字符串接不到
代码如下:
《?
// 设置一些基本的变量
$host =
"192.168.1.99";
$port = 1234;
// 设置超时时间
set_time_limit(0);
//
创建一个Socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could
not create
socket\n");
//绑定Socket到端口
$result = socket_bind($socket,
$host, $port) or die("Could not bind to
socket\n");
// 开始监听链接
$result = socket_listen($socket, 3) or die("Could not set up socket
listener\n");
// accept incoming connections
// 另一个Socket来处理通信
$spawn = socket_accept($socket) or die("Could not accept incoming
connection\n");
// 获得客户端的输入
$input = socket_read($spawn, 1024) or
die("Could not read input\n");
// 清空输入字符串
$input = trim($input);
//处理客户端输入并返回结果
$output = strrev($input) . "\n";
socket_write($spawn,
$output, strlen ($output)) or die("Could not write
output\n");
//
关闭sockets
socket_close($spawn);
socket_close($socket);
?》
socketphp心跳包和报文区分
socketphp心跳包和报文区分如下:
1、心跳包HeartbeatPacket通常是指在网络连接稳定时,定期发送的一种探测包,用于检测客户端和服务器之间的连接是否正常,通常情况下,客户端和服务器之间会通过通信协议规定一个固定时间间隔,客户端每隔一段时间就主动向服务器发送一个心跳包,以保持与服务器的连接状态,如果服务器在规定的时间内未收到来自客户端的心跳包,则认为该连接已经断开,并可以将连接资源释放,心跳包通常只包含一些很小的控制信息,比如一个特定的标识符或者时间戳等。
2、报文Message通常是指在Socket通信中传输的数据块,其格式和内容需要根据具体的通信协议来定义,通常包含了一定的协议头和协议体,在应用层协议中,报文内容可能涉及到业务逻辑,数据操作等方面,比如HTTP协议中的请求报文,响应报文,在IM通信中的聊天消息等,在网络传输过程中,报文一般会被分成多个数据包进行传输,接收端需要根据协议规定对数据包进行组装和解析,才能够还原出完整的报文内容。
php用socket获得客户端的ip和端口
socket_getpeername() 获取远程类似主机的ip地址
socket_getsockname() 获取本地socket的ip地址
怎么感觉你用的实际上是对的,难道用nginx一类的负载均衡服务器了

更多文章:
amaze ui 树状结构导航(网站结构怎么做SEO,树状结构与扁平结构的区别)
2026年4月15日 09:00
jquery多级联动下拉菜单(jQuery实现动态级联选择问题,比如3个下拉框,选择第一个其他的2个选项自动把内容选中.)
2025年9月15日 16:15
vue页面之间回调(vue.http 怎么定义jsonp的回调名)
2026年7月27日 06:30
a和b的ascii码(英文字母A的ASCII码值十进制的是65,那么B的ASCII码是什么)
2026年1月28日 12:30
学51单片机编程选用Keil uvision 和medwin哪个软件更好?为什么没有国产的C/C++的编译器
2025年10月8日 05:45
用fprintf为什么写不进文件(急求C语言大神,下面的程序运行正常也能读取文件,但是无法向文件中写入,问题出在哪)
2025年11月22日 18:45
登陆界面背景图(Win7登录界面背景图在哪里改(输入密码那))
2026年7月27日 18:00
我的世界displayname(minecraft我的世界怎样给物品改名)
2026年1月14日 14:45
shell脚本写加减乘除运算(用shell做个加减乘除运算)
2025年6月20日 21:30
sql语句查询男女生人数(SQL查询,按性别显示学生信息,并分别汇总男生女生人数)
2026年7月25日 08:00












