Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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 3.4侦听选定的服务器和端口_Python_Sockets - Fatal编程技术网

Python 3.4侦听选定的服务器和端口

Python 3.4侦听选定的服务器和端口,python,sockets,Python,Sockets,此代码可以创建套接字,连接到选定的服务器和端口,并打印回复。我有一个问题,我怎么能听港口超过一分钟?例如,我想监听所选端口20秒,并打印此时将出现的所有数据包。这个代码可以吗 import socket import sys try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) except socket.error as msg: print("Failed to create socket. Error co

此代码可以创建套接字,连接到选定的服务器和端口,并打印回复。我有一个问题,我怎么能听港口超过一分钟?例如,我想监听所选端口20秒,并打印此时将出现的所有数据包。这个代码可以吗

import socket
import sys

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

except socket.error as msg:
    print("Failed to create socket. Error code: " + str(msg[0]) + ' , Error message : ' + msg[1])
    sys.exit();

print('Socket Created')

host = #server
port = #port
try:
    remote_ip = socket.gethostbyname( host )

except socket.gaierror:
    print('Hostname could not be resolved. Exiting')
    sys.exit()

print('Ip address of ' + host + ' is ' + remote_ip)

s.connect((remote_ip , port))

print('Socket Connected to ' + host + ' on ip ' + remote_ip)

reply = s.recv(4096)

print(reply)

如果我正确理解您只需要等待20秒,那么您可以尝试设置套接字的超时时间,以满足您的要求

s.settimeout(20)
reply = s.recv(4096)

但是,不能保证一次发送所有数据包。正如一篇评论中提到的,你应该循环。方法是将套接字置于非阻塞模式

在循环之外,需要一个
buffer\u变量
,用于保存recv()的总结果

在进入循环之前,您将启动计时器。进入循环后,您将开始在套接字上调用
recv()
,同时将结果保存在
local\u变量中。每次在
local\u variable
中获得新内容时,都会将其附加到
buffer\u variable


当计时器过期时,您将
中断
循环,并相应地处理来自
缓冲区变量
的数据。

您熟悉循环的概念吗?循环对这种情况没有帮助