gpt4 book ai didi

python - 对内存中的 _socketobject 地址使用react

转载 作者:行者123 更新时间:2023-12-03 12:08:51 29 4
gpt4 key购买 nike

我正在尝试从内存地址“socket._socketobject object at 0x7f4c39d78b40”访问套接字对象,并在不同时间将其用于另一个功能。客户端连接到端口 9999,我希望服务器在稍后阶段对每个客户端使用react,同时保持连接正常。

def sock_con(host,port):
host = host
port = port
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind((host, port))
sock.listen(5)
while True:
client, address = sock.accept()
print client
print type(client)
print "Server (%s, %s) connected" % address
mongoconn = connectionx('IP_Clients')
key = {'addresses':'192.168.11.1'}
data = {'client':str(client), 'addresses':address}
mongoconn.update(key, data)
client.settimeout(60)

下一个代码位于可以随时使用的不同模块中:
import os,sys
import socket
currentdir = os.path.dirname(os.path.realpath(__file__))
parentdir = os.path.dirname(currentdir)
sys.path.insert(0,parentdir)
from mgodb import connectionx
mongoconn = connectionx('IP_Clients')
x= mongoconn.find_one({'addresses':'192.168.11.1'})
client= eval(x['client'])


def send_stuff(client,addresses,arg1):
while True:
try:
#data = client.recv(size)
print data
client.send(arg1)
return data

except:
#raise error('Client disconnected')
client.close()
return False



send_stuff(client,x['addresses'],'test10')

最佳答案

要稍后在同一进程中使用套接字,只需在它们到达时存储它们并稍后找到它们。像这样的东西:

...
clients = {}
while True:
client, addr = server.accept()
clients[addr[0]] = client

所以,如果你停止监听循环,或者在一个线程中运行它,或者你在一个线程中运行其他东西(没关系),你可以通过客户端的 IP 地址从字典客户端获取打开的套接字对象。
client = clients.get("192.168.1.1")

但是您也应该计算端口以进行检测,因为可能有两个不同的客户端从同一个 IP 地址与您联系。

如果您想将打开的套接字发送到另一个进程,那是可行的,但不值得麻烦。
您需要将套接字的文件描述符 (socket.fileno()) 发送到另一个进程,这可以使用 Python 模块 sendfds 来完成。它可以在 pypi.python.org 上找到。
然后,在接收过程中,您必须手动围绕它构建套接字包装器对象,或者以某种方式欺骗现有的 _socket.dll/.so 和 socket.py 模块来为您完成它。
很多工作和成功都令人怀疑。你应该做的是使用字典来存储套接字并创建一个接口(interface)(通过套接字、PIPE 或任何 IPC)来将消息转发到所需的连接套接字。

最后,您完全不必担心这种困惑,因为 Python 有 asyncore 模块。
它已经将套接字存储到字典和其他有用的东西中。问题是,您需要知道要实现什么才能充分调整异步客户端处理程序。设置正确的缓冲区大小等。但是 asyncore 很优雅,您可以轻松地将其与现有的 GUI 事件循环混合使用。在创建推送服务器或类似即时消息的系统时,经常使用 asyncore 和 asynchat。

关于python - 对内存中的 _socketobject 地址使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47582007/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com