套接字和文件描述符

套接字和文件描述符

据我所知,套接字在 /proc//fd 文件夹中创建 3 个文件描述符:STDIN、STDOUT 和 STDERR。

当我在一个套接字中输入时,它应该在原始 TCP 连接中从另一个套接字输出,但问题是,当我使用echoSTDIN 时,它不会输出字符串。

我附上一张照片:

在此输入图像描述

我希望在监听套接字中看到输出,但我没有。谢谢

答案1

打开一个套接字会打开一个插座,这就是您在输出 ( socket:[5474494]) 中看到的列为文件描述符 3 的内容。其他三个文件描述符是标准输入、输出和错误描述符,默认情况下为任何进程打开。在您的情况下,这些指向程序运行的终端,这就是当您写入文件描述符时“surni”显示在那里的原因。

要写入套接字,您需要使用适当的机制,例如netcat在另一个方向:

echo Hello | nc localhost 9999

或者,如果您使用的是 Bash:

echo Hello > /dev/tcp/localhost/9999

但是,您似乎已经使用另一个端口建立了与端口 9999 的连接netcat,因此这实际上不适用于您的情况。您需要使用已建立的连接...

如果您期望长时间运行nc为其他进程提供输入套接字的方式,则需要进行设置例如使用 FIFO:

mkfifo socket-input
nc localhost 9999 < socket-input
echo Hello > socket-input

相关内容