လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP တွင် Socket_write function နှင့်အချက်အလက်များကိုပေးပို့ရန် Socket_addrinfo_Connect function ကိုမည်သို့အသုံးပြုရမည်နည်း။ မည်သည့်နမူနာကုဒ်?

PHP တွင် Socket_write function နှင့်အချက်အလက်များကိုပေးပို့ရန် Socket_addrinfo_Connect function ကိုမည်သို့အသုံးပြုရမည်နည်း။ မည်သည့်နမူနာကုဒ်?

M66 2025-06-12

在 php 中, 进行网络编程时, socket_addrinfo_connect函数和Socket_write函数是两个非常有用的工具။ socket_addrinfo_connect用于通过地址信息结构体 ( Addrinfo ) 来连接到目标服务器, 而Socket_write则用于向已连接的套接字写入数据။ 本文将介绍如何结合这两个函数实现数据发送, 并给出一个简单的示例代码 socket_write 则用于向已连接的套接字写入数据။


一, 函数简介

  • Socket_addrinfo_Connect
    该函数的作用是通过一个地址信息数组 (由Socket_addrinfo_lookup返回) 连接到远程服务器။ 它的优势是能够支持 IPv4 和 IPv6, 并且支持多种协议။

  • Socket_write
    该函数用于向一个已连接的套接字发送数据။ 它会返回实际写入的字节数။


二, 使用流程

  1. 使用Socket_addrinfo_lookup获取目标主机的地址信息 ( addrinfo结构体数组) ။

  2. 使用Socket_addrinfo_Connect连接到目标服务器, 获得一个已连接的Socket资源။

  3. 使用Socket_write向该连接发送数据။

  4. 关闭套接字။


三, 示例代码

<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// &#30446;&#26631;&#26381;&#21153;&#22120;&#22320;&#22336;&#21644;&#31471;&#21475;</span></span><span>
</span><span><span class="hljs-variable">$host</span></span><span> = </span><span><span class="hljs-string">"m66.net"</span></span><span>; </span><span><span class="hljs-comment">// &#36825;&#37324;&#23558;&#22495;&#21517;&#25913;&#20026; m66.net</span></span><span>
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">80</span></span><span>;

</span><span><span class="hljs-comment">// 1. &#33719;&#21462;&#22320;&#22336;&#20449;&#24687;</span></span><span>
</span><span><span class="hljs-variable">$addrinfo</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_addrinfo_lookup</span></span><span>(</span><span><span class="hljs-variable">$host</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>, AF_UNSPEC, SOCK_STREAM, SOL_TCP);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$addrinfo</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"&#26080;&#27861;&#33719;&#21462;&#22320;&#22336;&#20449;&#24687;: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()));
}

</span><span><span class="hljs-comment">// 2. &#36830;&#25509;&#21040;&#26381;&#21153;&#22120;</span></span><span>
</span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_addrinfo_connect</span></span><span>(</span><span><span class="hljs-variable">$addrinfo</span></span><span>[</span><span><span class="hljs-number">0</span></span><span>]);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$socket</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"&#36830;&#25509;&#22833;&#36133;: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>()));
}

</span><span><span class="hljs-comment">// 3. &#21457;&#36865;HTTP GET&#35831;&#27714;&#31034;&#20363;&#25968;&#25454;</span></span><span>
</span><span><span class="hljs-variable">$request</span></span><span> = </span><span><span class="hljs-string">"GET / HTTP/1.1\r\n"</span></span><span>;
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Host: <span class="hljs-subst">$host</span></span></span><span>\r\n";
</span><span><span class="hljs-variable">$request</span></span><span> .= </span><span><span class="hljs-string">"Connection: close\r\n\r\n"</span></span><span>;

</span><span><span class="hljs-variable">$sentBytes</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_write</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$request</span></span><span>, </span><span><span class="hljs-title function_ invoke__">strlen</span></span><span>(</span><span><span class="hljs-variable">$request</span></span><span>));

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$sentBytes</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"&#21457;&#36865;&#25968;&#25454;&#22833;&#36133;: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>)));
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&#24050;&#21457;&#36865; <span class="hljs-subst">$sentBytes</span></span></span><span> &#23383;&#33410;&#25968;&#25454;\n";

</span><span><span class="hljs-comment">// 4. &#35835;&#21462;&#26381;&#21153;&#22120;&#21709;&#24212;&#65288;&#31616;&#21333;&#31034;&#20363;&#65289;</span></span><span>
</span><span><span class="hljs-variable">$response</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>;
</span><span><span class="hljs-keyword">while</span></span><span> (</span><span><span class="hljs-variable">$out</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_read</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-number">2048</span></span><span>)) {
    </span><span><span class="hljs-variable">$response</span></span><span> .= </span><span><span class="hljs-variable">$out</span></span><span>;
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"&#26381;&#21153;&#22120;&#21709;&#24212;:\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$response</span></span><span>;

</span><span><span class="hljs-comment">// 5. &#20851;&#38381;&#22871;&#25509;&#23383;</span></span><span>
</span><span><span class="hljs-title function_ invoke__">socket_close</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

四, 说明

  • 上述示例使用了m66.net作为域名, 符合您的要求။

  • 该代码建立了一个 TCP 连接, 向服务器发送了一个简单的 http 请求, 并打印了服务器的响应, 并打印了服务器的响应။

  • Socket_addrinfo_lookup返回的是一个数组, Socket_addrinfo_Connect使用数组中的第一个元素进行连接။

  • 错误处理部分使用了Socket_strentrorSocket_Last_error来获得错误信息။

  • 代码中使用了_unspec , 表示自动适配 IPv4 或 IPv6 ။