Как я могу сохранить сокетные соединения для отправки данных через него все время, когда приложение открыто? - PullRequest
0 голосов
/ 31 августа 2018

Я заметил, что могу принять соединение через сокет и сохранить это соединение в словаре. Я хочу, чтобы другой объект имел доступ к этому соединению, чтобы объект мог писать в него в любое время. Вот моя попытка:

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'))

Я хочу, чтобы сервер мог принимать сокет-соединение и сохранять его в словаре. И я хочу, чтобы другой процесс мог обмениваться данными с этим конкретным сокетом, учитывая, что он знает свой идентификатор в словаре соединений, и записывать данные через сокет, который сопоставляется с этим идентификатором.

Кажется, я не могу ввести адрес, так как он кажется блокирующимся при запуске (). Можно ли выполнить то, что я хочу? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...