안녕하세요 Socket의 Read()옵션 관련 도움좀 부탁드려요
글쓴이: goomba / 작성시간: 화, 2012/11/20 - 1:26오후
현재 소켓 통신 프로그래밍중입니다.
구조체를 Read하는 프로세스인데,
2가지의 구조체를 Read하는데 문제는 제가 Read를 하는 시점을 알수 없다는겁니다..
Struct aaa
{
int a1;
char a2[4];
} 와
Struct bbb
{
double b1;
char b2[8];
}
이라는 2개의 크기가 다른 구조체가 있는데
한번의 통신마다 n번의 Read를 하는데
n번의 횟수는 알수있는데
매번 aaa와 bbb가 날라오는 순서가 달라서
해당 구조체를 캐치할수가 없네요..
read(sock, &aaa, sizeof(aaa));
read(sock, &bbb, sizeof(bbb));
위와 같이 read를 하고 있는데 어떤 방법을 사용해야
그때그때 날아오는 구조체를 Read할수있나요?
고수님들의 도움 부탁드립니다.
Forums:
못합니다.
구조체 시작부분에 특정 byte를 넣으세요. 예를 들면 aaa는 반드시 첨에 0x01로 시작하고 bbb는 0x02로 시작한다든지...
그러면 한 바이트를 읽으면 다음에 뭘 읽을지 알 수 있습니다.
* 뭐 그렇다고 "한 바이트를 read하고 if해서 원하는 크기만큼 read" 식으로 짜면 회사에선 매우 눈총받겠지만 학교 과제 수준이라면 별 상관없습니다.
* 아 read할 때도 필요한 byte만큼 다 읽었는지 확인해서 아니면 루프 도는 건 하셨죠?
답글 감사합니다! 답글 보고 고민하던중에 구조체
답글 감사합니다!
답글 보고 고민하던중에 구조체 내에 공통 헤더가 있었네요
헤더 내에는 메세지 타입이랑 메세지 크기가 들어가있구요..
좋은 하루 보내세요!
헤더를 주는건 어떤가요.
//전송
a = "안녕";
send(a);
b = "하세요";
send(b);
//받기
read(c)
printf(c)
안
read(c)
printf(c)
녕하세요
그럼 우리는
이걸 받아서 더해줍니다.
안 + 녕하세요
날아오는 데이터의 길이가 다르고. 읽어들인 길이가 다르지만. 붙이니까. 잘 보입니다.
//
A,header = 0x11;
A.str = "안녕";
A.len = 4;
B.header = 0x12;
B.str = "하세요";
B.len = 6;
read(c);
read(c);
d += c + c;
안 + 녕하세요.
A의 첫 바이트를 사용자가 만든 프로토콜 헤더와 비교합니다.
같은게 있으면. 그것의 길이 만큼 잘라 냅니다.
만약 없다면. 다음 배열로 넘어가며. 확인하거나. 잘못된 패킷을 버립니다.
그럼.
d 는 안녕과 하세요로 나누어지게 됩니다.
그것을 구조체와 비교하시면 됩니다.
----------------------------------------------------------------------------
젊음'은 모든것을 가능하게 만든다.
매일 1억명이 사용하는 프로그램을 함께 만들어보고 싶습니다.
정규 근로 시간을 지키는. 야근 없는 회사와 거래합니다.
각 분야별. 좋은 책'이나 사이트' 블로그' 링크 소개 받습니다. shintx@naver.com
댓글 달기