如何让协程因超时而停止?
我不明白为什么 asyncio.wait_for() 对我不起作用。我有这样一段代码(计划实现 telnet 客户端):
def expect(self, pattern, timeout=20):
if type(pattern) == str:
pattern = pattern.encode('ascii', 'ignore')
return self.loop.run_until_complete(asyncio.wait_for(self.asyncxpect(pattern), timeout))
async def asyncxpect(self, pattern): #receives data in a cumulative way until match is found
regexp = re.compile(b'(?P<payload>[\s\S]*)(?P<pattern>%s)' %pattern)
self.buffer = b''
while True:
# add timeout
# add exception handling for unexpectedly closed connections
data = await self.loop.sock_recv(self.sock, 10000)
self.buffer += data
m = re.match(regexp, self.buffer)
if m:
payload = m.group('payload')
match = m.group('pattern')
return payload, match
Run Code Online (Sandbox Code Playgroud)
正如我所认为的,这段代码在某个时刻(在等待语句中)将控制权返回给事件循环。我认为当没有更多数据可以接收时应该发生这种情况。如果事件循环有控制权,它可以超时停止。
但是,如果服务器没有发送任何有用的(匹配的)我的代码就会在这个循环中绊倒,就在等待点。 …
几个小时后我发布了一篇与"Django email sending API"相关的帖子及其错误.所以我认为首先我应该尝试一下"smtplib".不幸的是,在与"smtplib"挣扎之后,我意识到它也行不通,因为我的代码或我的网络或机器出了问题,我无法弄明白.
任何人都可以帮我这个吗?
截至目前,经过艰苦的努力,我已经尝试了数百个解决方案,并且我已经尝试自己解决,但在我的情况下没有任何工作可以帮助.
代码如下.
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
import socks
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS4, "172.16.0.2", '8084')
socks.wrapmodule(smtplib)
#smtp = smtplib.SMTP()
msg = MIMEMultipart()
msg['From'] = 'my@yahoo.com'
msg['To'] = 'example@gmail.com'
msg['Subject'] = 'simple email in python'
message = 'here is the email'
msg.attach(MIMEText(message))
mailserver = smtplib.SMTP('smtp.mail.yahoo.com',465)
# identify ourselves to smtp gmail client
mailserver.ehlo()
# secure our email with tls encryption
mailserver.starttls()
# re-identify ourselves as an encrypted connection
mailserver.ehlo()
mailserver.login('my@yahoo.com', 'pswd12345678')
mailserver.sendmail('my@yahoo.com','example@gmail.com',msg.as_string())
mailserver.quit()
Run Code Online (Sandbox Code Playgroud)
这是一次又一次的错误: …
我是 python 的初学者,我想知道 python 中的套接字和请求模块之间的区别是什么。如果这个问题的格式不好,我很抱歉,如果这可能是由于我不知道不同的互联网协议到底是如何工作的,那么如果您分享相关文献,以便我自己寻找,我将不胜感激我的问题的答案。你能举例吗?
我目前正在实现以下代码,以将数据包发送到Parallels PVA XML API。我正在尝试将两个 XML数据包发送到服务器。第一个是指定用户凭据的登录数据包,第二个是包含有关API请求信息的数据包。这些数据包应该以空字节分隔\0。通常,服务器会发回多个数据包,第一个数据包是登录成功的说明,第二个数据包包含有关API请求的信息。
我遇到的问题是似乎第二个数据包没有被发送。我得到的唯一响应是第一个说明登录成功的数据包,但我没有得到包含有关API请求信息的数据包。我认为这可能是因为我要发送一个空字节,所以我尝试在base64中对所有内容进行编码,但最终得到了相同的结果。
因此,在我看来,要么连接被关闭,服务器没有足够的时间发送第二个数据包,要么由于空字节而完全忽略了该数据包。
任何帮助或评论将不胜感激。先感谢您!
import socket
import base64
def client(string):
HOST, PORT = '[IP_ADDRESS]', 4433
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(10)
sock.connect((HOST, PORT))
sock.send(base64.b64encode(string))
reply = sock.recv(131072)
sock.close()
return reply
packet = "<packet></packet>\0<packet></packet>"
print client(packet)
Run Code Online (Sandbox Code Playgroud)
请不要故意在数据包中没有信息,因为它包含敏感信息,并且ip地址被“ [IP_ADDRESS]”故意取代了
我想通过 python 套接字发送字典。
我尝试对发送数据进行编码,然后在接收点进行编码
但是无法转换接收数据的问题,无法转换为字典。
这是我的代码:
班级client.py:
HEADER_LENGTH = 512
IP = "127.0.0.1"
PORT = 963
my_username = input("Username: ")
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect((IP, PORT))
client_socket.setblocking(False)
username = my_username.encode('utf-8')
username_header = f"{len(username):<{HEADER_LENGTH}}".encode('utf-8')
client_socket.send(username_header + username)
while True:
message = input(f"{my_username} > ")
if message:
message = message.encode('utf-8')
message_header = f"{len(message)}:<{HEADER_LENGTH}".encode('utf-8')
# {'header': {message_header}, 'data': {message}}
send_dict = {} # 'header': message_header, 'data': message
send_dict["header"] = str(message_header)
send_dict["data"] = str(message)
client_socket.send(json.dumps(send_dict).encode('utf-8')) # message_header + message
try:
while True: …Run Code Online (Sandbox Code Playgroud) I'm new to web sockets (specifically to socketIO interfaces, both client and server), and I wonder how basic JWT auth is usually implemented. How the headers are passed through. Should I add them to every socket listener or emit event? Or just once during the connection. Maybe the connection is already considered private because of the connection id?
I am using Socket.io-client v.4 and flask-socketio. I am interested in general practices and would be grateful for any information or your …