Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nekit86
0 / 0 / 0
Регистрация: 03.12.2015
Сообщений: 4
#1

Передача простого массива в WinSOCK - C++

03.12.2015, 18:47. Просмотров 189. Ответов 0
Метки нет (Все метки)

Дело следующее. Дан исходный код UDP-клиента
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// пример простого UDP-клиента
  #include <stdio.h>
  #include <string.h>
  #include <winsock2.h>
  #include <windows.h>
 
  #define PORT 666
  #define SERVERADDR "127.0.0.1"
 
  int main(int argc, char* argv[])
  {
    char buff[10*1014];
    printf("UDP DEMO Client\nType quit to quit\n");
 
    // Шаг 1 - иницилизация библиотеки Winsocks
    if (WSAStartup(0x202,(WSADATA *)&buff[0]))
    {
      printf("WSAStartup error: %d\n",
             WSAGetLastError());
      return -1;
    }
 
    // Шаг 2 - открытие сокета
    SOCKET my_sock=socket(AF_INET, SOCK_DGRAM, 0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }
 
    // Шаг 3 - обмен сообщений с сервером
    HOSTENT *hst;
    sockaddr_in dest_addr;
 
    dest_addr.sin_family=AF_INET;
    dest_addr.sin_port=htons(PORT);
 
    // определение IP-адреса узла
    if (inet_addr(SERVERADDR))
      dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
    else
      if (hst=gethostbyname(SERVERADDR))
        dest_addr.sin_addr.s_addr=((unsigned long **)
              hst->h_addr_list)[0][0];
    else
      {
        printf("Unknown host: %d\n",WSAGetLastError());
        closesocket(my_sock);
        WSACleanup();
        return -1;
      }
 
    while(1)
    {
      // чтение сообщения с клавиатуры
      printf("S<=C:");fgets(&buff[0],sizeof(buff)-1,
             stdin);
      if (!strcmp(&buff[0],"quit\n")) break;
 
      // Передача сообщений на сервер
      sendto(my_sock,&buff[0],strlen(&buff[0]),0,
        (sockaddr *) &dest_addr,sizeof(dest_addr));
 
      // Прием сообщения с сервера
      sockaddr_in server_addr;
      int server_addr_size=sizeof(server_addr);
 
      int n=recvfrom(my_sock,&buff[0],sizeof(buff)-1,0,
        (sockaddr *) &server_addr, &server_addr_size);
 
      if (n==SOCKET_ERROR)
      {
        printf("recvfrom() error:"\
          "%d\n",WSAGetLastError());
        closesocket(my_sock);
        WSACleanup();
        return -1;
      }
 
      buff[n]=0;
 
      // Вывод принятого с сервера сообщения на экран
      printf("S=>C:%s",&buff[0]);
    }
 
    // шаг последний - выход
    closesocket(my_sock);
    WSACleanup();
 
    return 0;
  }
В данном случае передается строка символов. Нужно вместо строки передать на сервер целочисленный массив, самый обыкновенный, допустим, введенное число с клавиатуры. Помогите реализовать, парюсь 3 дня уже.
Исходник UDP-сервера
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
// Пример простого UDP-эхо сервера
  #include <stdio.h>
  #include <winsock2.h>
 
  #define PORT 666    // порт сервера
  #define sHELLO "Hello, %s [%s] Sailor\n"
 
  int main(int argc, char* argv[])
  {
    char buff[1024];
 
    printf("UDP DEMO echo-Server\n");
 
    // шаг 1 - подключение библиотеки 
    if (WSAStartup(0x202,(WSADATA *) &buff[0]))
    {
      printf("WSAStartup error: %d\n",
             WSAGetLastError());
      return -1;
    }
 
    // шаг 2 - создание сокета
    SOCKET my_sock;
    my_sock=socket(AF_INET,SOCK_DGRAM,0);
    if (my_sock==INVALID_SOCKET)
    {
      printf("Socket() error: %d\n",WSAGetLastError());
      WSACleanup();
      return -1;
    }
 
    // шаг 3 - связывание сокета с локальным адресом 
    sockaddr_in local_addr;
    local_addr.sin_family=AF_INET;
    local_addr.sin_addr.s_addr=INADDR_ANY;
    local_addr.sin_port=htons(PORT);
 
    if (bind(my_sock,(sockaddr *) &local_addr,
        sizeof(local_addr)))
    {
      printf("bind error: %d\n",WSAGetLastError());
      closesocket(my_sock);
      WSACleanup();
      return -1;
    }
 
    // шаг 4 обработка пакетов, присланных клиентами
    while(1)
    {
      sockaddr_in client_addr;
      int client_addr_size = sizeof(client_addr);
      int bsize=recvfrom(my_sock,&buff[0],
        sizeof(buff)-1,0,
        (sockaddr *) &client_addr, &client_addr_size);
      if (bsize==SOCKET_ERROR)
      printf("recvfrom() error: %d\n",
             WSAGetLastError());
 
      // Определяем IP-адрес клиента и прочие атрибуты
      HOSTENT *hst;
      hst=gethostbyaddr((char *)
            &client_addr.sin_addr,4,AF_INET);
      printf("+%s [%s:%d] new DATAGRAM!\n",
      (hst)?hst->h_name:"Unknown host",
      inet_ntoa(client_addr.sin_addr),
      ntohs(client_addr.sin_port));
 
      // добавление завершающего нуля
      buff[bsize]=0;
 
      // Вывод на экран 
      printf("C=>S:%s\n",&buff[0]);
 
      // посылка датаграммы клиенту
      sendto(my_sock,&buff[0],bsize,0,
        (sockaddr *)&client_addr, sizeof(client_addr));
    }
    return 0;
  }
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2015, 18:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача простого массива в WinSOCK (C++):

Сортировка простого массива - C++
Здравствуйте! Имеется проблема с сортировкой простого массива. Необходимо сначала вывести элементы входящие в интервал , затем все...

сортировка простого массива - C++
уважаемые программисты помогите пожалуйста переписать php код на С++, вот сам скрипт, заранее спасибо &lt;?php error_reporting(-1); //...

сортировка выбором простого массива - C++
помогите пожалуйста нарисовать блок схему, вот код по которому нужно нарисовать блок схему #include &quot;stdafx.h&quot; #include &quot;iostream&quot; ...

Сортировка массива методом простого обмена - C++
Привет,программисты! Мне поставлена задача выполнить сортировку одномерного массива методом простого обмена. Массив я задаю с...

Определить номер минимального простого числа до и после упорядочивания массива - C++
Упорядочить массив целых положительных чисел по возрастанию, определить номер минимального простого числа до и после упорядочивания...

Упорядочить массив целых положительных чисел по возрастанию, определить но- мер минимального простого числа до и после упорядочивания массива - C++
Упорядочить массив целых положительных чисел по возрастанию, определить но- мер минимального простого числа до и после ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2015, 18:47
Привет! Вот еще темы с ответами:

Упорядочить массив целых положительных чисел по возрастанию, определить номер минимального простого числа до и после упорядочивания массива - C++
Упорядочить массив целых положительных чисел по возрастанию, определить номер минимального простого числа до и после упорядочивания...

Передача массива структур в функцию не указывая размера массива - C++
Я читаю с командной строки файл в котором содержится массив структур. Есть библиотека с функцией в которую я прередаю файл и массив...

Передача массива - C++
Нужна помощь. как передать массив созданный в функции в main()? int poisk(AEROFLOT *aeroflot,char *n) { int i,k; k=0; ...

Передача массива - C++
Как передать массив(вектор) в класс class CZigzagLine { private: int value; public: int &amp;operator() (int...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.