2014-11-24 1 views
0

를 보내지 않습니다파이썬 소켓 전송 내가 문제가 오전 전체 문자열

def main(): 
while True: 
    command = raw_input('COMMAND >> ') 
    s.sendall(command) 
    data = s.recv(4096) 
    print(data+'\n\n') 

내가 보낸 데이터의 일부만 수신합니다. s.recv에 이미 더 많은 바이트를 설정하려고 시도했지만 실제로 도움이되지는 않았지만 문제는 계속됩니다.

무엇이 문제입니까?

+0

왜 사용하지 않는 모두 발송() :

또는,/모두 발송을 사용할 수있을 것? – Eugen

+0

시도했지만 문제가 해결되지 않았습니다. –

답변

1

문서 https://docs.python.org/2/library/socket.html#socket.socket.send "응용 프로그램은 모든 데이터가 전송되었는지 확인해야하며, 일부 데이터 만 전송 된 경우 응용 프로그램은 나머지 데이터를 전달해야합니다."

보낸 총 바이트 수에 대한 c.send(proc)의 반환 값을 확인하고 필요한 경우 더 많이 보냅니다.

예. 100 개의 문자를 보내고 c.send (data)가 40을 반환하면 c.send (data [40 :]) 등을 호출해야합니다. 너무 클라이언트 부분 https://docs.python.org/2/library/socket.html#socket.socket.sendall

+0

그래서, 나는 단지 c.send (proc [0 :])를 설정할 수 없다? 얼마나 많은 바이트가 누락되어 있는지 문자열을받을 때마다 확인해야합니까? –

+0

모든 것이 전송되었는지 확인하는 것은 발신자 (고객)의 책임이며 수신자 (서버)는 필요한 것을 읽을 책임이 있습니다. 원시 소켓을 통해 구조화 된 데이터를 보내려고하는 것처럼 보입니다. 대신 간단한 RPC 프레임 워크를 사용하여보아야 할 수도 있습니다. 그 대신 많은 리소스가 필요합니다. 예 : https://docs.python.org/2/library/xmlrpclib.html –

+0

Mhm. 고맙습니다. 나는 그것을 들여다 볼 것이다. –