【发布时间】:2011-11-25 19:06:52
【问题描述】:
我需要在一个新线程中打开一个套接字连接。该连接需要保持打开状态。然后我需要能够从主范围向套接字发送数据。
我感觉我的代码正在发生的事情是线程正在完成并立即关闭套接字,然后没有可以向其发送数据的属性。
如何保持线程和套接字打开以接收从主范围发出的数据?
(如果我去掉这个线程,它工作正常。)
下面是我正在使用的代码和输出。
这是shell的输出:
$ 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')
【问题讨论】: