2013-08-18 42 views
0

手头问题:拦截打印请求并修改作业内的数据以向其添加内容。PHP套接字无法接受来自打印机端口的连接

解决方案迄今:这是一个已经在Windows XP计算机的工作 1.重定向默认打印机原始TCP解决方案/ IP端口说9100 2.编写一个侦听的端口9100上一个基本的套接字服务器并在发生时接受连接。 3.从套接字读取并修改内容,然后再写入虚拟打印机,该虚拟打印机重定向到默认打印机所在的实际端口。

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

这里是socket服务器代码(非常基本的)...

<?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上正常工作。有人可以帮忙吗?

+0

发现在Windows 7上默认情况下,打印机使用IPV6套接字。如果您运行Microsoft Fixit来优先于IPV4或创建IPV6套接字,它应该可以工作。 – svalivarthi

回答

0

发现在Windows 7上默认情况下,打印机使用IPV6套接字。如果您运行Microsoft Fixit来优先于IPV4或创建IPV6套接字,它应该可以工作。 - user2693294

相关问题