gpt4 book ai didi

python - python中的套接字编程 - 时间戳

转载 作者:行者123 更新时间:2023-12-03 12:05:29 26 4
gpt4 key购买 nike

from socket import *
from time import ctime


HOST = 'localhost'
PORT = 21567
BUFSIZ = 1024
ADDR = (HOST, PORT)

tcpSerSock = socket(AF_INET, SOCK_STREAM)
tcpSerSock.bind(ADDR)
tcpSerSock.listen(5)

while True:
print 'waiting for connection...'
tcpCliSock, addr = tcpSerSock.accept()
print "...connected from:", addr

while True:
data = tcpCliSock.recv(BUFSIZ)
if not data:
break
tcpCliSock.send("[%s] %s" % (ctime(), data))

tcpCliSock.close()
tcpSerSock.close()

我有很多错误清除了它们。我正在关注 Core Python Application 一书。我需要知道循环中发生了什么?
tcpCliSock, addr = tcpSerSock.accept() 

这行代码到底做了什么?
“等待连接?”与谁以及如何?没有给出其他参数来连接某些东西!
这个 listen() 究竟是如何工作的?
简要解释程序。
谢谢

最佳答案

文档中的 Python Sockets HOWTO 中描述了您想要的内容。这是 Python 2 版本:

http://docs.python.org/2/howto/sockets.html

简短的版本是您发布的代码是一个简单的服务器,它被配置为响应来自一个单独进程的请求,可能在不同的机器上,向它发送一小块数据。该服务器发回带有时间戳的数据。
socket.listen()用于设置套接字以接收传入的连接。连接请求进入一个短队列并按顺序处理。 socket.accept()检查该监听队列中是否有传入连接,如果有,它会向另一台机器打开一个新套接字,以处理该连接。当连接结束时,第一个客户端的新套接字关闭,服务器套接字移动到队列中的下一个连接来处理它。

为了让这个服务器做任何事情,你需要使用一些客户端程序来打开正确的端口并向它发送消息。对于这么简单的事情,您可以尝试使用 telnet如果它安装在您的机器上。运行此服务器,然后尝试:

telnet localhost 21567

在同一台机器上并开始输入一些文本。您应该会看到回复。我的输出是这样的:
$ telnet localhost 21567
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
j
[Sun Sep 15 11:58:27 2013] j
jkl
[Sun Sep 15 11:58:29 2013] jkl
fdjksla;
[Sun Sep 15 11:58:30 2013] fdjksla;
fdjkasl;fjdksal;fjkdsa;
[Sun Sep 15 11:58:32 2013] fdjkasl;fjdksal;fjkdsa;

注意:您必须将主机名放入您的 HOST领域的工作。试试 'localhost'看看这是否有帮助。另外,我相信如果您使用 localhost作为您的 HOST参数,您可能无法接收来自其他机器的连接。在这种情况下,您需要在网络上使用您自己的本地主机名或 IP 地址。

我已经用固定缩进和 'localhost' 编辑了 OP为 HOST参数,并测试这是否适用于 telnet正如我在此处描述的那样,在另一个 shell 中。

我还注意到此代码从未到达 close()用于服务器套接字。你想要一个 break在你外面的某个地方 while如果您想关闭服务器并以有序的方式退出,则循环。

关于python - python中的套接字编程 - 时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18816152/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com