客户端的dataReceived不起作用?

时间:2010-07-09 23:43:29

标签: client twisted

我已经实现了一个简单的服务器 - 客户端脚本,如下所示:

服务器:

class Server(Protocol):

  def connectionMade(self):
    while True:
      self.transport.write('a')

客户端

class Client(Protocol):
  def dataReceived(self, data):
    print data

我所期待的是在客户端窗口上打印出一串无限的字符串,但实际上,没有出现任何内容。当我使用有限循环替换Server中的while循环时,它可以工作。所以似乎在整个数据出现在客户端之前需要终止函数connectionMade?我错了吗?

1 个答案:

答案 0 :(得分:0)

你是对的。只要connectionMade正在执行操作,尚未将任何数据写入套接字transport.write(x)并不意味着“立即将'x'写入套接字”,这意味着'当套接字有一些空闲的缓冲区空间时,向它写'x'。

这个例子,就像你说的那样:

def connectionMade(self):
  while True:
    self.transport.write('a')

简单地分配一个充满'a'的无限大缓冲区,分配内存直到它崩溃。