Я заметил, что могу принять соединение через сокет и сохранить это соединение в словаре. Я хочу, чтобы другой объект имел доступ к этому соединению, чтобы объект мог писать в него в любое время. Вот моя попытка:
socket.py
class Socket:
def __init__(self, host, port):
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.bind((host, port))
self.s.listen(5)
self.connections = {}
def start(self):
print('Listening to port 10005')
while True:
conn, addr = self.s.accept()
print('connected to: ' + addr[0] + ':' + str(addr[1]))
self.connections[str(addr[1])] = conn
self.s.close()
def bother(self, addr, msg):
if addr in self.connections:
socket = self.connections[addr]
secket.send(msg.encode('utf-8'))
data = socket.recv(1024)
print(data.decode('utf-8'))
if __name__ == '__main__':
socket = Socket('0.0.0.0', 10005)
socket.start()
while True:
addr = input('Enter addr: ')
msg = input('Enter msg: ')
socket.bother(addr, msg)
Это device_sim.py
// device_sim.py
import socket
from _thread import *
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 10005))
while True:
data = s.recv(1024)
s.send('Dont talk to me'.encode('utf-8'))
Я хочу, чтобы сервер мог принимать сокет-соединение и сохранять его в словаре. И я хочу, чтобы другой процесс мог обмениваться данными с этим конкретным сокетом, учитывая, что он знает свой идентификатор в словаре соединений, и записывать данные через сокет, который сопоставляется с этим идентификатором.
Кажется, я не могу ввести адрес, так как он кажется блокирующимся при запуске (). Можно ли выполнить то, что я хочу? Спасибо