Linux에서 Berkely SOCKET API를 사용하여 TCP 서버를 작성하는 중입니다. 이제 클라이언트는 일련의 사양을 가지고 있으며 클라이언트가 보내는 각 메시지는 해당 사양을 기반으로합니다. 즉, 클라이언트에서 보낸 메시지는 사양에 지정된 많은 구조체 중 하나에 해당합니다. 이제 시나리오는 서버가 클라이언트가 몇시에 보낼 메시지인지 알지 못한다는 것입니다. 메시지를 받으면 그 메시지가 무엇인지 알 수 있습니다. 클라이언트가 보낸 메시지에는 가변 길이가 있으므로 어떤 메시지를 얻는 지 미리 알 수 없습니다. 이 문제를 해결하기 위해 나는 다음과 같은 방법을 사용했다 : 나는 크기 4096의 기본 버퍼를 사용하는 것입니다recv() sys 호출을 올바르게 사용하는 방법
const char *buf[4096] = { 0 };
if (recv (connected, buf, 4096, 0) == -1)
{
printf ("Error in recvng message\n");
exit (-1);
}
을 (클라이언트로부터 메시지가이 크기보다 클 수 없다). 그 버퍼에 수신 한 후 나중에 내가 메시지 유형을 확인하고 다음과 같이 대응 조치를 취할 :이 잘 작동하지만 난 그냥 적절한 방법 그것을 또는 수 뭔가가 확인하고 싶어
struct ofp_header *oph;
oph=(struct ofp_header *)buf;
switch (oph->type)
{
case example_pkt:
handle_example_pkt();
break;
}
이것보다 낫다. 모든 도움을 많이 주셨습니다.
감사합니다.
네, 이것이 제가 두려워하는 것입니다. 이 문제에 대한 해결책을 게시 할 수 있습니까? – Abdullah
편집 된 답변을 참조하십시오. –
감사합니다. 많이 감사합니다. 이제 무엇을 해야할지 명확합니다 :) 건배 :) – Abdullah