TCP를 사용하여 네트워크를 통해 기가 바이트의 데이터를 전송하는 프로토콜을 작성 중이므로 프로토콜 프로그래밍에 대해 약간 가르쳐보십시오. 가장 빠르고 효율적인 방법으로 데이터를 전송하기 위해이 전송 프로토콜을 설계하는 방법을 잘 모르겠습니다.데이터 전송 프로토콜 디자인
Windows에서 Qt를 사용하고 있습니다.
- 먼저 로그인 세부 촬영 : 다음과 같이 순간 는 내 응용 프로그램 프로토콜 (데이터를 전송하는 부분)의 내 디자인입니다.
- 4 킬로바이트의 첫 번째 데이터 패킷 (소켓에)을 기록한 다음 서버에서 패킷을 받았는지 확인하기를 기다립니다.
- 서버가 데이터 패킷 수신을 확인하면 (int "1"을 작성하여) 다음 4KB를 씁니다.
- 모든 데이터가 전송되면 서버로 전송 된 데이터의 md5sum을 보냅니다.
- 서버가 int 8로 다시 확인하면 데이터 전송이 완료됩니다.
현재 127.0.0.1 이상을 전송할 때 동일한 컴퓨터에서 166KB/초보다 빠른 속도를 얻을 수 없습니다. 필자는 다른 프로토콜 디자인을 읽으려고했지만 응용 프로그램 용으로 작성할 수있는 데이터 전송 프로토콜에 대한 문서는 거의 없습니다.
게시 한 프로토콜 디자인이 잘못되었거나 심각한 문제가 있습니까? 프로토콜은 각 패킷이 서버에 의해 확인 될 때까지 기다려야합니까, 아니면 계속 써야합니까?
TCP는 이미 확인 (ACK), 체크섬 및 일반적으로 페이로드 크기에 대한 적응 알고리즘을 처리합니다. 그래서 당신이하고있는 모든 일은 불필요한 것처럼 보입니다. 여전히 166KB/s는 로컬 호스트에서 매우 느립니다. –
그래서 서버가 확인을 보낼 때까지 기다리지 않고 소켓에 계속 써야합니까? – user1066991
물론입니다. TCP/IP 스택은 전송, 확인, 재시도, 순서 지정 등을 처리합니다. [socket read/write] (http://beej.us/guide/bgnet/output/html)에서 리턴 값에 대해서만 신경 써야합니다. /singlepage/bgnet.html) 호출. –