Udp

연결 되 지 않 은 Udp 프로 그래 밍 기반.
코드 설명 은 다음 과 같 습 니 다.

  
  
  
  
  1. //Server.cpp  
  2. #include <stdio.h>  
  3. #include <winsock2.h>  
  4. #pragma comment(lib,"WS2_32.lib")  
  5.  
  6. #define BUF_SIZE 64  
  7.  
  8. int main()  
  9. {  
  10.     WSADATA wsadata; // DLL  
  11.     int retVal;  
  12.  
  13.     SOCKET sServer;  
  14.     char buf[BUF_SIZE];  
  15.  
  16.     // DLL  
  17.     retVal=WSAStartup(MAKEWORD(2,2),&wsadata);  
  18.     if(retVal != 0)  
  19.     {  
  20.         printf("WSAStartup failed!
    "
    );  
  21.     }  
  22.  
  23.     //  
  24.     sServer=socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);  
  25.     if(sServer == INVALID_SOCKET)  
  26.     {  
  27.         printf("socket failed!
    "
    );  
  28.  
  29.         WSACleanup();  
  30.         return -1;  
  31.     }  
  32.  
  33.     // ( , )  
  34.     SOCKADDR_IN addrServ;  
  35.     addrServ.sin_family=AF_INET; // TCP/IP  
  36.     addrServ.sin_port=htons(4999);  
  37.     addrServ.sin_addr.S_un.S_addr=INADDR_ANY;  
  38.  
  39.     retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));   
  40.     if(retVal == SOCKET_ERROR)  
  41.     {  
  42.         printf("bind failed!
    "
    );  
  43.  
  44.         closesocket(sServer);  
  45.         WSACleanup();  
  46.         return -1;  
  47.     }  
  48.  
  49.       
  50.  
  51.     //  
  52.     SOCKADDR_IN addrClient;  // ,  
  53.     int len=sizeof(SOCKADDR_IN);  
  54.  
  55.     ZeroMemory(buf,BUF_SIZE);  
  56.  
  57.     retVal=recvfrom(sServer,buf,BUF_SIZE,0,(LPSOCKADDR)&addrClient,&len);  
  58.     if(retVal == SOCKET_ERROR)  
  59.     {  
  60.         printf("recvfrom failed!
    "
    );  
  61.  
  62.         closesocket(sServer);  
  63.         WSACleanup();  
  64.         return -1;  
  65.     }  
  66.  
  67.     //  
  68.     printf("Server receives data: ");  
  69.     printf("%s
    "
    ,buf);  
  70.  
  71.     //  
  72.     closesocket(sServer);  
  73.     WSACleanup();  
  74.     return 0;  
  75. }  

 

  
  
  
  
  1. //Client.cpp  
  2. #include <stdio.h>  
  3. #include <winsock2.h>  
  4. #pragma comment(lib,"WS2_32.lib")  
  5.  
  6. #define BUF_SIZE 64  
  7.  
  8. int main()  
  9. {  
  10.     WSADATA wsadata;  
  11.     int retVal;  
  12.  
  13.     SOCKET sClient;  
  14.     char buf[BUF_SIZE];  
  15.  
  16.  
  17.     // DLL  
  18.     retVal=WSAStartup(MAKEWORD(2,2),&wsadata);  
  19.     if(retVal != 0)  
  20.     {  
  21.         printf("WSAStartup failed!
    "
    );  
  22.     }  
  23.  
  24.     //  
  25.     sClient=socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);  
  26.     if(sClient == INVALID_SOCKET)  
  27.     {  
  28.         printf("socket failed!
    "
    );  
  29.  
  30.         WSACleanup();  
  31.         return -1;  
  32.     }  
  33.  
  34.       
  35.     // ( , )  
  36.     SOCKADDR_IN addrServ;  
  37.     addrServ.sin_family=AF_INET; // TCP/IP  
  38.     addrServ.sin_port=htons(4999);  
  39.     addrServ.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");  
  40.  
  41.     ZeroMemory(buf,BUF_SIZE);  
  42.     strcpy(buf,"Hello Udp!");  
  43.  
  44.     retVal=sendto(sClient,buf,BUF_SIZE,0,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));  
  45.     if(retVal == SOCKET_ERROR)  
  46.     {  
  47.         printf("sendto failed!
    "
    );  
  48.  
  49.         closesocket(sClient);  
  50.         WSACleanup();  
  51.         return -1;  
  52.     }  
  53.  
  54.     //  
  55.     closesocket(sClient);  
  56.     WSACleanup();  
  57.     return 0;  

 
*************************************************************************
추가 설명:
1.
#define INVALID_SOCKET  (SOCKET)(~0) #define SOCKET_ERROR            (-1)
#define INADDR_ANY              (u_long)0x00000000
 
#include #include #pragma comment(lib,"WS2_32.lib") //#pragma comment(Comment-Type,"CommentString")
① 헤더 파일 은 함수 의 성명 만 있 습 니 다.(컴 파일 단계 연결)② 라 이브 러 리 파일,DLL 이 있 으 면 색인 역할 을 합 니 다.없 으 면 함수 의 실현 코드 를 포함 합 니 다.(링크 단계)③ DLL,실행 단계 에서 함수 의 구현 코드 를 연결 합 니 다.
2.
 

typedef struct WSAData {
WORD wVersion; //
WORD wHighVersion; //
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char FAR* lpVendorInfo; } WSADATA,
*LPWSADATA;

3.
 
int WSAStartup(
  WORD wVersionRequested,
  LPWSADATA lpWSAData
);

Return Values

The WSAStartup function returns zero if successful. Otherwise, it returns one of the error codes listed in the following.(WSASYSNOREADY | WSAEFAULT)

 4.
main()함수 의 경우 0 으로 돌아 가면 성공 적 으로 실 행 된 것 을 나타 낸다.다른 것 으로 돌아 가면 프로그램 이 이상 하 다 는 것 을 나타 낸다.
*************************************************************************
 
함수 원형:
1.
int sendto(
  SOCKET s,
  const char* buf,
  int len,
  int flags,
  const struct sockaddr* to,
  int tolen
);

int flags, //MSG_OOB | MSG_DONTROUTE
 
int flags, //MSG_OOB | MSG_PEEK
int recvfrom(
  SOCKET s,
  char FAR* buf,
  int len,
  int flags,
  struct sockaddr FAR* from,
  int FAR* fromlen
);

좋은 웹페이지 즐겨찾기