现在有一个需求 需要用php来做一个数据包的转发功能, 具体需求:
监听本地某个端口(A、B均是通过这个端口进行通信的), 将A要发送的数据包转给B,将B要发送的数据包转给A。
就是这样,就是要用php来实现一个类似中转站的程序,请问大家有没有什么比较好的思路或者代码~ 谢谢啦!!
server端:
<?php
if (true){
//if(isset($_POST['submit'])){
$i = 1;
ignore_user_abort(true);
set_time_limit(100*60); //确保在连接客户端时不会超时
$address = '127.0.0.1'; //设置IP
$port = 65534; //端口号,调试的时候,可以多换端口来测试程序!
/*if(!($sock=socket_create(AF_INET,SOCK_STREAM,SOL_TCP)))exit; //创建一个SOCKET
if(!($ret=socket_bind($sock,$address,$port)))exit; //绑定到socket端口
socket_close($ret);*/
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("创建失败"); //创建一个SOCKET
$ret = socket_bind($sock, $address, $port) or die("绑定失败");
socket_listen($sock, 4); //开始监听
while (true) {
if ($i <= 2) {
if ($i == 1) {
$souce1 = socket_accept($sock);
$buf1 = socket_read($souce1, 8192); //将接收到的资源$msgsock用socket_read每次8192的大小读到$buf中
socket_write($souce1, $buf1); //向client端返回向要的信息(可有可无)
$i ++;
}
if ($i == 2) {
$souce2 = socket_accept($sock);
$buf2 = socket_read($souce2, 8192); //将接收到的资源$msgsock用socket_read每次8192的大小读到$buf中
socket_write($souce2, $buf2); //向client端返回向要的信息(可有可无)
$i ++;
break;
}
}
}
// echo "读取客户端第一次发来的信息<p>";
while (true) {
//以下是用来接收client(客户)端传来的信息,然后进行转发
//sleep(1);
$buf1 = socket_read($souce1, 8192);
if ($buf1 != null && $buf1 != false &&$buf1!="") {
socket_write($souce2, $buf1);
}
$buf2 = socket_read($souce2, 8192);
if ($buf2 != null && $buf2 != false && $buf2!="") {
socket_write($souce1, $buf2);
} }}?>