51代码网ORACLEMYSQLSQL SERVER其它数据库java/jspasp/asp.netC/C++/VC++APP应用其它语言服务器应用
您现在的位置: 51代码网 >> 其它 >> 文章正文

php来做数据包转发

更新时间:2012-1-12:  来源:51代码网

现在有一个需求 需要用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);
  }  }}?>

[1] [2] 下一页

赞助商链接
推荐文章
  • 此栏目下没有推荐文章
  • {
    设为首页 | 加入收藏 | 友情链接 | 网站地图 | 联系站长 |