내 프로그램을 사용하여 서버와 클라이언트 컴퓨터간에 데이터 통신을 시도하고 있습니다. 나는 TCP에 대한 지식이 거의 없으며 그것이 어떻게 작동 하는지를 알기 때문에 나는 정말로 도움이 필요하다. 이 버퍼에 연재됩니다클라이언트 서버 메시지 해석
int _header_signature;
int _offset_a;
int _offset_b;
int _size_a;
int _size_b;
wchar_t stuff[_size_a];
wchar_t stuff2[_size_b];
int _footer_signature;
및 윈속의 send()
방법을 사용하여 보내 가져옵니다 다음과 같이
는 지금까지 내 자신의 간단한 프로토콜의 메시지가 정의된다.
제 목표는 어떻게 든이 메시지를 해석하고 서버 컴퓨터의 유사한 구조체에서 데이터를 추출하는 것입니다. 이것은 클라이언트와 서버 간의 일대일 연결입니다.
이 데이터를 서버 부분에서 어떻게 해석하겠습니까?
겠습니까 I : 내가 버퍼에받을 것을 쓰고, 메시지 해석 작업을 시작 recv()
를 호출
A) 루프recv()
는 반환 할 아무것도가 없으며 보낸 메시지 모두에 지금 경우에만 버퍼? 클라이언트가 메시지를 계속 보내면 어떤 일이 일어날 지 잘 모르겠습니다. 두 번째 메시지는 첫 번째 메시지가 recv()
'd 일 때만 도착할 것입니까? 아니면 클라이언트가 메시지를 계속 보내는 한 recv()
계속 물건을 반환 할 것인가?
또는
B)가 메시지의 일부가 도착했습니다 경우에도 와서 빨리이 메시지를 해석하는 작업을 시작? 헤더는 내가 얼마나 더 기대해야하는지 알려줘야한다. (이 작업은 매우 길고 지루한 작업 임)
전체 메시지가 버퍼에 수신되도록하는 방법이 없으며 데이터로 작업 할 수 있도록 구조체에 캐스트해야합니다. 나는 사람을 혼동하는 경우 뭔가 말해 내가 질문 하나에 번들로 꽤 많은 질문이
그래서 내게 말하고있는 것은 (recv()가 작성한 버퍼가 내 메시지보다 작다고 가정 할 때) recv()를 호출해야만 메시지의 일부분 만 가져올 수 있습니다. recv()를 호출하면 메시지의 또 다른 작은 부분을 얻고 수신 된만큼 해석합니다. –
예, 실제로 얼마나 큰 버퍼를 사용하는지는 중요하지 않습니다. recv()에 대한 하나의 호출에서 채워지지 않을 수도 있습니다. –