有没有办法通过bash / nc / xinetd / nginx聪明的技巧来运行只输出Unix时间然后断开连接的TCP服务器?
客户端连接到TCP服务器,服务器以字符串形式输出unix时间,例如“1456860938”,然后服务器断开客户端。
服务器应继续运行以服务于许多客户端,但每个连接的时间长度非常短。
答案 0 :(得分:0)
一个快速的python脚本可能会成功。我引用了这个socket programming tutorial。这纯粹是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
答案 1 :(得分:0)
假设您正在运行标准inetd
,则只需将date
添加到/etc/inetd.conf
即可:
daytime stream tcp nowait nobody /bin/date date +%s
重新加载(sudo pkill -HUP inetd
)后,您可以验证结果:
$ netcat localhost daytime
1456915174
(显然,如果你已经在那里运行守护进程,请使用daytime
以外的端口。)