q UDP IT COOKBOOK fgets sendto recvfrom UDP
q UDP 서버/클라이언트 예제 IT COOKBOOK • 예제 동작 방식 fgets() sendto() recvfrom() UDP 클라이언트 printf() UDP 서버 recvfrom() sendto() -7 -
q UDP 서버/클라이언트 분석 (3/4) IT COOKBOOK • UDP 서버/클라이언트 구조 ① UDP 서버 UDP 클라이언트 socket() bind() recvfrom() sendto() 네트워크 sendto() recvfrom() closesocket() - 10 -
q UDP 서버/클라이언트 분석 (4/4) IT COOKBOOK • UDP 서버/클라이언트 구조 ② UDP 서버 UDP 클라이언트 socket() bind() connect() recvfrom() send() 네트워크 sendto() recv() closesocket() - 11 -
q 데이터 전송 함수 (3/4) IT COOKBOOK • recvfrom() 함수 – 수신 버퍼에 도착한 데이터를 애플리케이션 버퍼로 복사 int recvfrom ( SOCKET s, char* buf, int len, int flags, struct sockaddr* from, int* fromlen ); 성공: 받은 바이트 수, 실패: SOCKET_ERROR - 14 -
q 데이터 전송 함수 (4/4) IT COOKBOOK • recvfrom() 함수 사용 예 // 송신자 주소 저장을 위한 변수를 선언한다. SOCKADDR_IN peeraddr; int addrlen; // 받은 데이터를 저장할 버퍼를 선언한다. char buf[BUFSIZE]; // 데이터를 받는다. addrlen = sizeof(peeraddr); retval = recvfrom(sock, buf, BUFSIZE, 0, (SOCKADDR *)&peeraddr, &addrlen); if(retval == SOCKET_ERROR) 오류 처리; printf("%d바이트를 받았습니다. n", retval); - 15 -
q 브로드캐스팅 (3/6) IT COOKBOOK • 브로드캐스트 데이터를 보내기 위한 절차 ① 소켓에 대해 브로드캐스팅을 활성화시킴 BOOL b. Enable = TRUE; retval = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&b. Enable, sizeof(b. Enable)); if(retval == SOCKET_ERROR) err_quit("setsockopt()"); - 18 -
q 브로드캐스팅 (4/6) IT COOKBOOK • 브로드캐스트 데이터를 보내기 위한 절차 (cont’d) ② 브로드캐스트 주소로 데이터를 보냄 // 소켓 주소 구조체를 초기화한다. SOCKADDR_IN remoteaddr; Zero. Memory(&remoteaddr, sizeof(remoteaddr)); remoteaddr. sin_family = AF_INET; remoteaddr. sin_port = htons(9000); remoteaddr. sin_addr. s_addr = htonl(INADDR_BROADCAST); // 보낼 데이터를 버퍼에 저장한다. char buf[BUFSIZE]; . . . // 데이터를 보낸다. retval = sendto(sock, buf, strlen(buf), 0, (SOCKADDR *)&remoteaddr, sizeof(remoteaddr)); if(retval == SOCKET_ERROR) 오류 처리; printf("%d바이트를 보냈습니다. n", retval); - 19 -
- Slides: 22