Advertisement
Guest User

Untitled

a guest
Feb 28th, 2011
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <math.h>
  2. #include <conio.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5. #include <winsock2.h>
  6.  
  7. #define CLNT_PORT 12505 // определяем порт, с которого наша программа будет посылать сообщения
  8. #define SRV_PORT 12300 // порт, на котором нас должен услышать сервер
  9. #define SERVERADDR "127.0.0.1"
  10.  
  11. int main(int argc, char* argv[])
  12. {
  13.     char buff[2*1024+1]; // в этот массив будем принимать сообщения, приходящие от сервера
  14.     printf("UDP Client\n");
  15.  
  16.     // Шаг 1 - иницилизация библиотеки Winsocks
  17.     if (WSAStartup(0x202,(WSADATA *)&buff[0]))
  18.     {
  19.         printf("WSAStartup error: %d\n",
  20.             WSAGetLastError());
  21.         getch();
  22.         return -1;
  23.     }
  24.  
  25.     // Шаг 2 - открытие сокета
  26.     SOCKET my_sock=socket(AF_INET, SOCK_DGRAM, 0);
  27.     if (my_sock==INVALID_SOCKET)
  28.     {
  29.         printf("socket() error: %d\n",WSAGetLastError());
  30.         WSACleanup();
  31.         getch();
  32.         return -1;
  33.     }
  34.  
  35.     // Шаг 3 - обмен сообщений с сервером
  36.     HOSTENT *hst;
  37.     sockaddr_in srv_addr, clnt_addr;
  38.  
  39.     srv_addr.sin_family=AF_INET;
  40.     srv_addr.sin_port=htons(SRV_PORT);
  41.     clnt_addr.sin_family=AF_INET;
  42.     clnt_addr.sin_addr.s_addr=INADDR_ANY;
  43.     clnt_addr.sin_port=htons(CLNT_PORT);
  44.  
  45.     // определение IP-адреса узла
  46.     if (inet_addr(SERVERADDR))
  47.       srv_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
  48.     else
  49.         if (hst=gethostbyname(SERVERADDR))
  50.         srv_addr.sin_addr.s_addr=((unsigned long **)
  51.              hst->h_addr_list)[0][0];
  52.     else
  53.     {
  54.         printf("Unknown host: %d\n",WSAGetLastError());
  55.         closesocket(my_sock);
  56.         WSACleanup();
  57.         return -1;
  58.     }
  59.     //bind local port for client
  60.     bind (my_sock, (SOCKADDR*) &clnt_addr, sizeof (clnt_addr));
  61.  
  62.  
  63.  
  64.     // Передача сообщений на сервер
  65.     sendto(my_sock,(char*)"Here's text which send to server" ,strlen("Here's text which send to server"),0,
  66.        (sockaddr *) &srv_addr,sizeof(srv_addr));
  67.  
  68.     // Прием сообщения с сервера
  69.     sockaddr_in server_addr;
  70.     int server_addr_size=sizeof(server_addr);
  71.  
  72.     int n=recvfrom(my_sock,&buff[0],sizeof(buff)-1,0,
  73.     (sockaddr *) &server_addr, &server_addr_size);
  74.  
  75.     if (n==SOCKET_ERROR)
  76.     {
  77.         printf("recvfrom() error:"\
  78.         "%d\n",WSAGetLastError());
  79.         closesocket(my_sock);
  80.         WSACleanup();
  81.         return -1;
  82.     }
  83.  
  84.     // шаг последний - выход
  85.     closesocket(my_sock);
  86.     WSACleanup();
  87.     getch();
  88.     return 0;
  89.  
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement