服务于unix时间的TCP服务器

时间:2016-03-01 19:42:23

标签: bash unix-timestamp netcat xinetd

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

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

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

2 个答案:

答案 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以外的端口。)