2010-07-09 6 views
1

내가 같은 간단한 서버 - 클라이언트 스크립트를 구현 한 :클라이언트 쪽에서 dataReceived가 작동하지 않습니까?

서버 : 나는 무한대의 문자열을이었다 기대했던

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

클라이언트 창에 인쇄 된

class Server(Protocol): 

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

클라이언트, 하지만 실제로는 아무 것도 나타나지 않습니다. 서버의 while 루프를 유한 루프로 바꾸면 작동합니다. 그래서 전체 데이터가 클라이언트 측에 나타날 수 있기 전에 함수 connectionMade를 종료해야하는 것처럼 보입니까? 내가 잘못?

+0

나는 당신이 옳다는 것을 확신한다. –

답변

0

정확합니다. connectionMade이 작업을 수행하는 동안 데이터가 아직 소켓에 쓰여져 있지 않습니다. transport.write(x)은 "즉시 소켓에 x '를 쓰는 것을 의미하지는 않습니다. 소켓에 여유 공간이있을 때'x '를 쓰십시오'라는 의미입니다.

의 예는, 당신이 문구를 같이

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

단순히 충돌까지 메모리를 할당하는의 '의 무한히 큰 버퍼 풀 할당합니다.

관련 문제