python中的套接字编程-时间戳
我犯了不少错误,把它们清除了。我正在学习核心Python应用程序手册。我需要知道循环中发生了什么python中的套接字编程-时间戳,python,sockets,Python,Sockets,我犯了不少错误,把它们清除了。我正在学习核心Python应用程序手册。我需要知道循环中发生了什么 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) wh
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()
这行代码到底是做什么的?
“等待连接?”与谁以及如何联系?没有提供其他参数来连接某个对象!
这个listen()是如何工作的?
简短地解释一下程序。
谢谢文档中的Python Sockets HOWTO中描述了您想要的内容。以下是Python 2的版本: 简短的版本是,您发布的代码是一个简单的服务器,配置为响应来自单独进程(可能在不同的机器上)的请求,该进程向它发送一小块数据。此服务器发回前面带有时间戳的数据
socket.listen()
用于设置套接字以接收传入连接。连接请求进入短队列并按顺序处理socket.accept()
检查该侦听队列中是否有传入连接,如果有,它会向另一台机器打开一个新的套接字以处理该连接。当连接结束时,到第一个客户端的新套接字关闭,服务器套接字移动到队列中的下一个连接来处理它
要使此服务器执行任何操作,您需要使用一些客户端程序打开正确的端口并向其发送消息。对于这样简单的事情,如果您的机器上安装了telnet,您可以尝试使用它。运行此服务器,然后重试:
tcpCliSock, addr = tcpSerSock.accept()
在同一台机器上,开始键入一些文本。你应该看到回应。我的输出如下所示:
telnet localhost 21567
注意:您必须将主机名放入您的HOST
字段中才能工作。试试'localhost'
,看看这是否有帮助。另外,我相信如果使用localhost
作为HOST
参数,您可能无法接收来自其他机器的连接。在这种情况下,您需要在网络上使用自己的本地主机名或IP地址
我已经用固定缩进编辑了OP,并为HOST
参数编辑了'localhost'
,并测试了它是否可以在另一个shell中使用telnet
,正如我在这里所描述的
我还注意到,此代码从未到达服务器套接字的
close()
。如果您想关闭服务器并有序退出,则需要在外部while
循环中的某个位置执行中断操作。文档中的Python Sockets HOWTO中描述了您想要的操作。以下是Python 2的版本:
简短的版本是,您发布的代码是一个简单的服务器,配置为响应来自单独进程(可能在不同的机器上)的请求,该进程向它发送一小块数据。此服务器发回前面带有时间戳的数据
socket.listen()
用于设置套接字以接收传入连接。连接请求进入短队列并按顺序处理socket.accept()
检查该侦听队列中是否有传入连接,如果有,它会向另一台机器打开一个新的套接字以处理该连接。当连接结束时,到第一个客户端的新套接字关闭,服务器套接字移动到队列中的下一个连接来处理它
要使此服务器执行任何操作,您需要使用一些客户端程序打开正确的端口并向其发送消息。对于这样简单的事情,如果您的机器上安装了telnet,您可以尝试使用它。运行此服务器,然后重试:
tcpCliSock, addr = tcpSerSock.accept()
在同一台机器上,开始键入一些文本。你应该看到回应。我的输出如下所示:
telnet localhost 21567
注意:您必须将主机名放入您的HOST
字段中才能工作。试试'localhost'
,看看这是否有帮助。另外,我相信如果使用localhost
作为HOST
参数,您可能无法接收来自其他机器的连接。在这种情况下,您需要在网络上使用自己的本地主机名或IP地址
我已经用固定缩进编辑了OP,并为HOST
参数编辑了'localhost'
,并测试了它是否可以在另一个shell中使用telnet
,正如我在这里所描述的
我还注意到,此代码从未到达服务器套接字的close()
。如果您想关闭服务器并有序退出,您可能需要在外部的某个位置进行中断,而循环。阅读文档:阅读文档:注意,如果您对主机使用“”,这将监听所有接口(通常是您的以太网/无线网卡),然后是“环回”这是一个只能从服务器内部访问的虚拟接口);通过这样做,您可以在另一个盒子上使用telnet(或其他应用程序)连接到您的服务器。请注意,如果您位于正在进行NAT的无线或其他路由器(即您的ip地址类似于192.168.1.2)的后面,则通常需要执行本评论范围之外的额外操作,以允许用户从网络外部访问您的服务器。我认为OP试图使用“”
用于主机
,但当将代码放入堆栈溢出时,可能在其中添加了一些空格。请注意,如果对主机使用“”,这将侦听所有接口(通常是您的以太网/无线网卡,然后是“环回”,这是一个只能从服务器内部访问的虚拟接口);通过这样做,您可以在另一个盒子上使用telnet(或其他应用程序)连接到您的服务器。请注意,如果您在一个正在进行NAT的无线或其他路由器后面(例如,您有一个ip地址,如192.168.1.2),您需要做一些超出本评论范围的额外工作,以允许人们从网络外部访问您的服务器