PHP套接字无法接受来自打印机端口的连接

时间:2013-08-18 05:42:38

标签: php sockets printing

手头问题:拦截打印请求并修改作业中的数据以向其添加内容。

到目前为止的解决方案:这是适用于Windows XP机器的解决方案   1.将默认打印机重定向到原始TCP / IP端口,例如9100。   2.编写一个基本的套接字服务器,它监听端口9100并在它们发生时接受连接。   3.从套接字读取并在写入虚拟打印机之前修改内容,虚拟打印机重定向到默认打印机所在的实际端口。

问题:步骤1和2似乎无法在Windows 7上运行..有人可以帮忙..?

这是套接字服务器代码(非常基本的)......

<?php
 // set some variables
 $host = "127.0.0.1";
 $port = 9100;
 // don't timeout!
set_time_limit(0);

if(($sock = socket_create(AF_INET, SOCK_STREAM, 0)) < 0)
{
    echo "failed to create socket: ".socket_strerror($sock)."\n";
    exit();
}

if(($ret = socket_bind($sock, $host, $port)) < 0)
{
    echo "failed to bind socket: ".socket_strerror($ret)."\n";
    exit();
}

if( ( $ret = socket_listen( $sock, 0 ) ) < 0 )
{
    echo "failed to listen to socket: ".socket_strerror($ret)."\n";
    exit();
}

socket_set_nonblock($sock);

echo "waiting for clients to connect\n";

while (true)
{
    $connection = @socket_accept($sock);
    if ($connection === false)
    {
        usleep(100);
    }elseif ($connection > 0)
    {
        //handle_client($sock, $connection);
    }else
    {
        echo "error: ".socket_strerror($connection);
        die;
    }
} 

所以此时,当打印作业发生在默认打印机上时,服务器应该接受连接,但事实并非如此。执行socket_create,socket_connect和发送socket_write的基本套接字客户端工作正常。但是当发送到同一端口的打印作业时,同样的事情不会发生。它在Windows XP上运行良好。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

发现在Windows 7上默认情况下打印机使用IPV6套接字。如果你运行一个微软的fixit来优先选择IPV4而不是IPV6或者创建一个IPV6套接字它应该可行。 - user2693294