Python 一行代码静默套接字监听器
有没有办法用一行代码写个Python程序,让它监听一个特定的TCP端口,接受连接,但不做任何回应呢?
我可以用两行代码做到这一点:
import socket; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.bind(("", 5555)); s.listen(1); accepter = s.accept();
while True: data = accepter[0].recv(1024);
但是我想用 python -c
来运行,所以需要把它写成一行。
我该怎么做呢?
1 个回答
7
使用 itertools.count
和 reduce
(在 Python 3.x 中,你需要用 functools.reduce
):
import socket, itertools; s = socket.socket(socket.AF_INET, socket.SOCK_STREAM); s.bind(('', 5555)); s.listen(1); accepter = s.accept(); reduce(lambda x, y: accepter[0].recv(1024), itertools.count())
你也可以使用其他无限迭代器,比如 itertools.cycle
或 itertools.repeat
。
接下来的代码是对上面那行代码的详细扩展版本。
import socket, itertools
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 5555))
s.listen(1)
accepter = s.accept()
reduce(lambda x, y: accepter[0].recv(1024), itertools.count())