Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的套接字编程-时间戳_Python_Sockets - Fatal编程技术网

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

我犯了不少错误,把它们清除了。我正在学习核心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)

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),您需要做一些超出本评论范围的额外工作,以允许人们从网络外部访问您的服务器