套接字和文件描述符

aDo*_*DoN 1 file-descriptors socket

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

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

我附上一张照片:

在此处输入图片说明

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

Ste*_*itt 5

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

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

echo Hello | nc localhost 9999
Run Code Online (Sandbox Code Playgroud)

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

echo Hello > /dev/tcp/localhost/9999
Run Code Online (Sandbox Code Playgroud)

但是,您似乎已经使用 another 建立了到端口 9999 的连接netcat,因此这在您的情况下实际上不起作用。您需要使用已建立的连接...

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

mkfifo socket-input
nc localhost 9999 < socket-input
echo Hello > socket-input
Run Code Online (Sandbox Code Playgroud)