sockets - 带多线输入的gawk双向网络通信

标签 sockets networking gawk

我正在尝试使 gawk 程序充当简单的服务器,绑定(bind)到网络套接字并回答查询。

到目前为止,我的脚本是这样的:

#!/usr/local/bin/gawk

BEGIN {
    s="nc -l 10.0.0.21 2345";
    while (s |& getline inp) {
        print inp;
        print "Response to " inp |& s;
    }
}

你会注意到我正在使用 netcat而不是gawk的内部网络?根据我对文档的阅读,理论上我应该能够设置 s="/inet/tcp/2345/0/0";让 gawk 绑定(bind)到端口 2345 上的每个本地 IP 地址,但我认为如果我只想绑定(bind)到一个 IP(在多 IP 主机上),我需要使用类似于我所做的事情。另外,当我测试 /inet/tcp/...符号,我无法让它工作。该脚本将运行,并等待输入,但它似乎没有绑定(bind)到套接字,所以它不会得到任何输入。

所以......使用 netcat 替代方案,我的问题是...... 客户端关闭连接后,如何让服务器保持运行?

使用上面的代码,我可以连接并发送多行来获得响应,但是一旦客户端断开连接,服务器也会退出。

我认为这是因为 nc命令行关闭输入流,从而结束 while 循环,但在我看来,while 循环应该通过重新打开 s 来继续。变量再次作为协同过程。

我该如何进行这项工作?如果我可以使用 /inet/tcp/...,这不是问题吗?符号?我应该将整个 gawk 脚本包装在一个 shell 脚本中,然后在退出时重新运行它吗?或者我应该将内部while循环包装在另一个while循环中吗?或者是其他东西?

我尝试用这个替换while循环的调用:
...
    while (1) {
        s |& getline inp;
        print inp;
...

但它以完全相同的方式退出。

谢谢你的帮助。

最佳答案

GNU netcat 您可以使用 -k关闭客户端连接后保持服务器运行的选项。见 the manual .

关于sockets - 带多线输入的gawk双向网络通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327221/

相关文章:

c# - 使用套接字时发送当前值的 Unity 延迟

c - 为什么没有用于 signed long 的套接字 ntol?

c# - 通过 HttpWebRequest 传递二进制数据

java - Android Socket 无法连接到笔记本电脑服务器 - 但本地 Java 程序可以

perl - 使用单行删除第 N 次出现后的内容

c - 在 C 中使用 UDP 通过套接字发送单个无符号字符

c - MultiSocket 监听 Linux Socket 编程

Ubuntu 12.04 中 ns3 中的 Python 编码失败

awk - gawk 和 mawk 的区别(列宽)

linux - 如何使用awk生成3个总和为60的自然数