Python 3.4侦听选定的服务器和端口
此代码可以创建套接字,连接到选定的服务器和端口,并打印回复。我有一个问题,我怎么能听港口超过一分钟?例如,我想监听所选端口20秒,并打印此时将出现的所有数据包。这个代码可以吗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
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
中
当计时器过期时,您将中断
循环,并相应地处理来自缓冲区变量
的数据。您熟悉循环的概念吗?循环对这种情况没有帮助