파이썬 소켓 프로그래밍에 대한 질문이 있습니다. 나는 소켓에 익숙하지 않아서 어떻게 작동하는지 잘 모른다. 파이썬 응용 프로그램을 실행하는 동안 두 컴퓨터간에 이진 파일을 전송해야하며 일부 소켓 프로그래밍을 수행하는 것이 시스템 명령 scp 또는 netcat을 수행하는 것보다 빠르거나 빠를 것이라고 생각했습니다. 그러나 어떤 이유로 기계에서 1GB 이미지를 전송하는 데 14 초 정도 걸립니다. 나는 SCP를 통해 그것을하면 약 9 걸립니다. 이것은 SCP가 악명 높게 느리기 때문에 이상하게 보입니다. 나는 나의 전송 속도가 netcat에 필적 할 것이기를 바라고 있었지만, 나는 이것을 달성하는 데 어려움을 겪고있다.느린 파이썬 소켓 전송
서버 :
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 50000))
s.listen(1)
img = open('test.img', 'rb')
client, addr = s.accept()
l = img.read(4096)
while(l):
client.send(l)
l = img.read(4096)
img.close()
s.close()
클라이언트 : 이것은 분명히 매우 기본이고 기능과 예외 처리를 많이 부족하지만 적어도 (천천히하지만) 전송할 파일을 얻을 수
host = ''
port = 50000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
img = open('./newimg.img', 'wb')
l = s.recv(4096)
while(l):
img.write(l)
l = s.recv(4096)
img.close()
s.close()
. 나는 분명히 '호스트'변수와 같은 코드에서 몇 가지 세부 사항을 제거했다.
어떻게 향상시킬 수 있습니까?
감사합니다.
TCP_NODELAY를 설정하십시오. send/recv 차단 문제가 있다면 조금 도움이 될 것입니다. – Arnial