사용자 정의 프로토콜을 기입하십시오, 전송 및 모듈, SRC / msg.c은 다음과 수신 메시지를 캡슐화 :
사용법 #include "msg.h"
사용법 #include <unistd.h>
사용법 #include <string.h>
사용법 #include <memory.h>
사용법 #include <SYS / types.h>
// 계산 체크 코드计算校验码函数
정적 서명 숯불 msg_check (메시지 * 메시지)
{
부호 문자 S = 0;
I에서 INT;
위한 (I = 0; I <를 sizeof (메시지 -> 헤드); I ++)
{
S + = 메시지 -> 헤드 [I]는;
}
에 대해 (나는 = 0; I <를 sizeof (메시지 -> 버프); I ++)
{
S + = 메시지 -> 버프 [I];
}
반환들;
}
//는 메시지 : 데이터를 상기 데이터 파라미터 버프 보내 버프
INT write_msg (INT sockfd와, 숯 * 버프, size_t와 LEN)
{
메시지 메시지;
memset 함수 (메시지, 0, sizeof의 (메시지))
의 strcpy (메시지. 머리, "iotek2012");
방어 적이기 (message.buff, BUFF, 렌),
message.checknum msg_check = (메시지),
IF (쓰기 (sockfd와, 메시지, sizeof의 (메시지))! = sizeof의 (메시지)) {
반환 - . (1);
}
}
// 메시지 나타날 데이터 sockfd와의 데이터 버프 버프 수신 메시지 파라미터를 판독
INT read_msg (INT sockfd와, 숯 * 버프, size_t와 LEN)
{
메시지 메시지;
memset 함수 (메시지, 0 상기는 sizeof (메시지))
를 size_t 크기;
((크기 = 판독 (sockfd와, 메시지를 sizeof (메시지))) <0) {경우
-1을 리턴;
}
다른 (크기 == 0) {경우
0을 리턴;
}
코드 확인 //检查校验码是否正确
서명 숯불 msg_check S = (메시지);
(! (들 == (서명 숯불) message.checknum) && (을 strcmp ( "iotek2012", message.head는))) {// strcmp와 문자열에 대한 비교 기능의 경우
방어 적이기는 (버프가 message.buff는, 렌);
복귀를 sizeof (메시지);
}
리턴 -1;
}
특징이 size_t에 정의되는 부호 INT, 부호없는 정수 형태로 이해 <stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>和<wchar.h>
코드의 이동성 증가, 표준 C 헤더 파일.
2. 컴파일 테스트
컴파일 할 때 사용하는 명령 줄에서 -Iinclude 디렉토리에서 현재 디렉토리를 표시 헤더 파일의 검색 디렉토리 중 하나로 포함