Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中,给定两个IO::Socket';s如何连接第一个插座&x27;s输入到第二个';s输出,反之亦然?_Perl_Sockets - Fatal编程技术网

在Perl中,给定两个IO::Socket';s如何连接第一个插座&x27;s输入到第二个';s输出,反之亦然?

在Perl中,给定两个IO::Socket';s如何连接第一个插座&x27;s输入到第二个';s输出,反之亦然?,perl,sockets,Perl,Sockets,假设我在IO::Socket的帮助下在Perl中建立了两个连接。第一个具有套接字$s1,第二个具有套接字$s2 有什么想法吗?我如何将它们连接在一起,使从$s1接收到的内容发送到$s2,从$s2接收到的内容发送到$s1 我不明白怎么做。我不知道如何把它们连接起来。我希望做一些类似于$s1->stdin=$s2->stdout和$s2->stdin=$s1->stdout的事情,但是Perl中没有这样的构造 请帮帮我 谢谢,波达·西多。怎么样 $s2->print( $_ ) while &

假设我在
IO::Socket
的帮助下在Perl中建立了两个连接。第一个具有套接字
$s1
,第二个具有套接字
$s2

有什么想法吗?我如何将它们连接在一起,使从
$s1
接收到的内容发送到
$s2
,从
$s2
接收到的内容发送到
$s1

我不明白怎么做。我不知道如何把它们连接起来。我希望做一些类似于
$s1->stdin=$s2->stdout
$s2->stdin=$s1->stdout
的事情,但是Perl中没有这样的构造

请帮帮我

谢谢,波达·西多。

怎么样

$s2->print( $_ ) while <$s1>;
$s2->while打印($);

如果您处理的是二进制数据,您需要知道读写块的大小。假设您正在处理512字节的块:

my $buffer;
while (read $s1 => $buffer, 512) { # read up to 512 bytes
    print $s2 $buffer;
} 
我不确定
管道
是否与插座一起工作,但如果是这样:

pipe $s1 => $s2;
pipe $s2 => $s1;
“可能”有用。我对
管道
功能没有太多经验

编辑:

如评论中所述,您似乎正在尝试创建HTTP代理。CPAN已经有几个模块可以为您实现这一点。出现了一个快速搜索:


你必须从一端读,另一端写。这是不对的。作用于文本流,而不是二进制数据。它不连接任何东西,这是一次性的。
在套接字上工作得很好,套接字是
IO::Handle
对象。事实上,没有办法“连接”两个套接字。您必须从第一个数据库读取数据(sysread优于readline),然后将该数据写入另一个数据库。(有一个sendfile系统调用连接两个描述符,但其中一个必须是磁盘文件。)您实际想要实现什么?jrockway,我正在尝试创建一个可以监视我的web使用情况的程序。因此,当我连接到web时,我希望这个程序位于我和web之间。