0

有没有办法通过 bash/nc/xinetd/nginx 巧妙的技巧来运行一个只输出 Unix 时间然后断开连接的 TCP 服务器?

客户端连接到 TCP 服务器,服务器以字符串形式输出 unix 时间,例如“1456860938”,然后服务器断开客户端。

服务器应该继续运行以服务许多客户端,但每个连接的时间长度很短。

4

2 回答 2

0

假设您正在运行一个标准inetd,您可以简单地date添加/etc/inetd.conf

daytime            stream tcp      nowait  nobody  /bin/date date +%s

重新加载(sudo pkill -HUP inetd)后,您可以验证结果:

$ netcat localhost daytime
1456915174

daytime(显然,如果您已经在那里运行守护程序,请使用其他端口)。

于 2016-03-02T10:42:26.850 回答
0

一个快速的 python 脚本可能会解决问题。我参考了这个套接字编程教程。这纯粹是 TCP,而不是 HTTP 服务器

'''
TCP Time Server
'''

import socket
import sys
import time
import signal

HOST = ''   # blank for All interfaces
PORT = 8000 # Port to listen on

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Signal handler to close the socket on exit
def signal_handler(signal, frame):
    s.close()
    sys.exit(0)

# Bind to port
try:
    s.bind((HOST, PORT))
    signal.signal(signal.SIGINT, signal_handler)
except socket.error as msg:
    print('Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1])
    sys.exit()

# Listen for connections
s.listen(1)

print('Ready to serve')

# Except connections forever
while 1:
    #wait to accept a connection - blocking call
    conn, addr = s.accept()
    conn.sendall(str(int(time.time())))
    conn.close()

样本输出:

$ nc localhost 8000
1456868540
于 2016-03-01T21:46:47.807 回答