Мне нужно открыть сокетное соединение в новом потоке.Эта связь должна оставаться открытой.Затем мне нужно иметь возможность отправлять данные в сокет из основной области видимости.
У меня есть ощущение, что с моим кодом происходит то, что поток сразу завершает и закрывает сокет, а затем нет свойств дляотправить данные на.
Как сохранить поток и сокет открытым для получения данных для отправки из основной области?
(Если я выберу поток из этого, он будет работать нормально.)
Ниже приведен код и вывод, с которым я работаю.
Вот вывод из оболочки:
$ python test.py
Traceback (most recent call last):
File "test.py", line 25, in <module>
packet = mt.sendData('somedata')
File "test.py", line 19, in sendData
self.mySocket.send(myString)
AttributeError: 'NoneType' object has no attribute 'send'
А вот код
примечание 19 строка: self.mySocket.send(myString)
строка 25: packet = mt.sendData('somedata')
import threading
import socket
class MyTest(threading.Thread):
def __init__(self, host, port):
self.host = host
self.port = port
self.mySocket = None
threading.Thread.__init__(self)
def run(self):
#open socket
self.mySocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.mySocket.connect( ( self.host, self.port ) )
self.mySocket.setblocking(1)
def sendData(self, myString):
# send data to socket
self.mySocket.send(myString)
packet = self.mySocket.recv(4096)
mt = MyTest('127.0.0.1', 50001)
mt.start()
packet = mt.sendData('somedata')