标签: python-sockets

python 协程超时

如何让协程因超时而停止?

我不明白为什么 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)

正如我所认为的,这段代码在某个时刻(在等待语句中)将控制权返回给事件循环。我认为当没有更多数据可以接收时应该发生这种情况。如果事件循环有控制权,它可以超时停止。

但是,如果服务器没有发送任何有用的(匹配的)我的代码就会在这个循环中绊倒,就在等待点。 …

python coroutine python-sockets python-asyncio

2
推荐指数
1
解决办法
2345
查看次数

如何重新发出python-smtplib的"socket.gaierror"错误?

几个小时后我发布了一篇与"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 sockets python-sockets

2
推荐指数
1
解决办法
3113
查看次数

Python 套接字和请求

我是 python 的初学者,我想知道 python 中的套接字和请求模块之间的区别是什么。如果这个问题的格式不好,我很抱歉,如果这可能是由于我不知道不同的互联网协议到底是如何工作的,那么如果您分享相关文献,以便我自己寻找,我将不胜感激我的问题的答案。你能举例吗?

python protocols python-sockets python-requests

2
推荐指数
1
解决办法
1511
查看次数

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 python-sockets

1
推荐指数
1
解决办法
2万
查看次数

在python套接字中发送字典

我想通过 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)

python python-3.x python-sockets

1
推荐指数
1
解决办法
195
查看次数

How Auth works with SocketIO?

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 …

sockets websocket socket.io python-sockets flask-socketio

1
推荐指数
1
解决办法
3299
查看次数