태터데스크 관리자

도움말
닫기
적용하기   첫페이지 만들기

태터데스크 메시지

저장하였습니다.

티스토리 툴바



2009/04/27 18:15

UDP Server Client

Server 흐름도

/////////////// 윈속 초기화 //////////////

    WSADATA wsa;

    if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)   //WSAStartup 성공:0, 실패:오류코드 이며, &wsa WSADATA타입 변수의 주소

                                                                                //MAKEWORD는 주어진 상위, 하위 바이트를 조합하여 word 값을 반환합니다.                          return -1;

 

/////////////// 1.socket /////////////

                  SOCKET sock=socket(AF_INET,SOCK_DGRAM,0); //socket(주소체계, 소켓 타입, 프로토콜)

                                                                                                /*              SOCKET socket (

                                                                                                                                             int af, // 주소 체계

                                                                                                                                             int type, // 소켓 타입

                                                                                                                                             int protocol // 프로토콜

                                                                                                                              ) ;

                                                                                                                            성공: 새로운 소켓, 실패: INVALID_SOCKET

                                                                                                          */

                  if(sock==INVALID_SOCKET) err_quit("socket()"); //listen_sock의 리턴값이 INVALID_SOCKET이면 err_quit함수 호출

 

////////////// 2. setsockopt //////////

                  retval=setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&bEnable, sizeof(bEnable)); 

                                                                                                                              /* int setsockopt (

                                                                                                                                             SOCKET s,

                                                                                                                                             int level,

                                                                                                                                             int optname,

                                                                                                                                             const char* optval,

                                                                                                                                              int optlen

                                                                                                                            ) ;

                                                                                                                            성공: 0, 실패: SOCKET_ERROR

                                                                                                                            */

                  if(retval==SOCKET_ERROR) err_quit("setsockopt()");

 

                  ////소켓 주소 구조체 초기화

                  ZeroMemory(&addr,sizeof(addr)); //ZeroMemory는 구조체나 변수를 초기화, addr의 구조체 변수를 초기화

                  addr.sin_family=AF_INET; 

                  addr.sin_port=htons(6127);  //htons host byte order network byte order Port정보의 바이트 순서변경

                  addr.sin_addr.s_addr=inet_addr("192.168.0.255");  //192.168.0.0 ~ 192.168.0.255 다 뿌려줌

 

////////// 3.sendto /////////

                                   int len=sendto(sock, buf, strlen(buf), 0, (SOCKADDR *)&addr, sizeof(addr)); 

                                                                                                                                                 /*int sendto (

                                                                                                                                                               SOCKET s,

                                                                                                                                                               const char* buf,

                                                                                                                                                               int len,

                                                                                                                                                               int flags,

                                                                                                                                                               const struct sockaddr* to,

                                                                                                                                                               int tolen

                                                                                                                                             ) ;

                                                                                                                                             성공: 보낸 바이트 수, 실패: SOCKET_ERROR

                                                                                                                                             */

                                   if(len == SOCKET_ERROR) err_quit("sendto()");

 

/////////////// 4.closesocket() ////////////////

                  closesocket(sock);  //listen_sock 소켓을 닫음

 

// 윈속 종료

                  WSACleanup();  //성공:0, 실패:SOCKET_ERROR

 

 

 

UDP 서버가 hello라는 데이터를 보냄

 

 

 client 흐름도

/////////////// 윈속 초기화 //////////////

    WSADATA wsa;

    if(WSAStartup(MAKEWORD(2,2), &wsa) != 0)   //WSAStartup 성공:0, 실패:오류코드 이며, &wsa WSADATA타입 변수의 주소

                                                                                //MAKEWORD는 주어진 상위, 하위 바이트를 조합하여 word 값을 반환합니다.                          return -1;

//////////// 1.socket ///////////////

                  SOCKET sock=socket(AF_INET,SOCK_DGRAM,0);

                  if(sock==INVALID_SOCKET) err_quit("socket()");

 

////소켓 주소 구조체 초기화

                SOCKADDR_IN addr;

                  addr.sin_family = AF_INET;

                addr.sin_port = htons(6127);

                addr.sin_addr.s_addr = inet_addr("192.168.0.127");

 

///////// 2.bind /////////

                  bind(sock,(SOCKADDR*)&addr, sizeof(addr));

 

////////// 3.recvfrom //////////

                                   int len=recvfrom(sock, buf, BUFSIZE, 0, (SOCKADDR *)&peeraddr, &addrlen);  /* int recvfrom (

                                                                                                                                                                                 SOCKET s,

                                                                                                                                                                                 char* buf,

                                                                                                                                                                                 int len,

                                                                                                                                                                                 int flags,

                                                                                                                                                                                 struct sockaddr* from,

                                                                                                                                                                                 int* fromlen

                                                                                                                                                                     ) ;

                                                                                                                                             성공: 받은 바이트 수, 실패: SOCKET_ERROR

                                                                                                                                                */

///////// 4.closesocket() //////////

                  closesocket(sock);

                 

// 윈속 종료

    WSACleanup();

 

UDP client UDP server의 데이터와 정보를 보여줌

 

 

 

 

 

 

 

 


 
Trackback 0 Comment 0