q 14 IT COOKBOOK Format Message DWORD Format
q 오류 코드를 문자열로 바꾸기 (1/4) IT COOKBOOK • Format. Message() 함수 DWORD Format. Message ( DWORD dw. Flags, // ① 옵션 LPCVOID lp. Source, // NULL DWORD dw. Message. Id, // ② 오류 코드 DWORD dw. Language. Id, // ③ 언어 LPTSTR lp. Buffer, // ④ 오류 문자열 시작 주소 DWORD n. Size, // 0 va_list* Arguments // NULL ); 성공: 오류 메시지의 길이, 실패: 0 한빛미디어㈜ -4 - ehanbit. net
q 오류 코드를 문자열로 바꾸기 (2/4) IT COOKBOOK • err_quit() 함수 정의 #include <winsock 2. h> #include <stdlib. h> void err_quit(char *msg) { LPVOID lp. Msg. Buf; Format. Message( FORMAT_MESSAGE_ALLOCATE_BUFFER| FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGet. Last. Error(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lp. Msg. Buf, 0, NULL); Message. Box(NULL, (LPCTSTR)lp. Msg. Buf, msg, MB_ICONERROR); Local. Free(lp. Msg. Buf); exit(-1); } 한빛미디어㈜ -5 - ehanbit. net
q 오류 코드를 문자열로 바꾸기 (4/4) IT COOKBOOK • err_display() 함수 정의 #include <winsock 2. h> #include <stdlib. h> void err_display(char *msg) { LPVOID lp. Msg. Buf; Format. Message( FORMAT_MESSAGE_ALLOCATE_BUFFER| FORMAT_MESSAGE_FROM_SYSTEM, NULL, WSAGet. Last. Error(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR)&lp. Msg. Buf, 0, NULL); printf("[%s] %s", msg, (LPCTSTR)lp. Msg. Buf); Local. Free(lp. Msg. Buf); } 한빛미디어㈜ -7 - ehanbit. net
q 윈속 초기화와 종료 (2/3) IT COOKBOOK • 윈속 종료 함수 int WSACleanup (void) ; 성공: 0, 실패: SOCKET_ERROR 한빛미디어㈜ -9 - ehanbit. net
q 윈속 초기화와 종료 (3/3) IT COOKBOOK • 예제 코드 #include <winsock 2. h> int main(int argc, char* argv[]) { // 윈속 초기화 WSADATA wsa; if(WSAStartup(MAKEWORD(2, 2), &wsa) != 0) return -1; Message. Box(NULL, "윈속 초기화 성공", "성공", MB_OK); // 윈속 종료 WSACleanup(); return 0; } 한빛미디어㈜ - 10 - ehanbit. net
q 소켓 생성과 닫기 (2/6) IT COOKBOOK • 주소 체계 #define AF_UNIX 1 /* local to host (pipes, portals) */ #define AF_INET 2 /* internetwork: UDP, TCP, etc. */ #define AF_IMPLINK 3 /* arpanet imp addresses */ #define AF_PUP 4 /* pup protocols: e. g. BSP */ #define AF_CHAOS 5 /* mit CHAOS protocols */ #define AF_NS 6 /* XEROX NS protocols */ #define AF_IPX AF_NS /* IPX protocols: IPX, SPX, etc. */ #define AF_ISO 7 /* ISO protocols */ #define AF_OSI AF_ISO /* OSI is ISO */ . . . 한빛미디어㈜ - 12 - ehanbit. net
q 소켓 생성과 닫기 (6/6) IT COOKBOOK • 예제 코드 int main(int argc, char* argv[]) { // 윈속 초기화. . . // socket() SOCKET tcp_sock = socket(AF_INET, SOCK_STREAM, 0); if(tcp_sock == INVALID_SOCKET) err_quit("socket()"); Message. Box(NULL, "TCP 소켓 생성 성공", "성공", MB_OK); // closesocket() closesocket(tcp_sock); // 윈속 종료. . . } 한빛미디어㈜ - 16 - ehanbit. net
- Slides: 17