Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/41: Рейтинг темы: голосов - 41, средняя оценка - 4.61
3 / 3 / 1
Регистрация: 15.09.2011
Сообщений: 104

Несколько UDP портов

15.09.2012, 12:51. Показов 8206. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. У меня такая задача. Нужно использовать два порта на основе UDP сокетов. И принимать данные с этих двух портов. Один порт должен быть четным,другой нечетный. Сервер должен принимать данные с обоих портов ну и там в зависимости на какой порт пришли данные в соответствии с этим обрабатывать. Как это реализовать подскажите. Заранее спасибо. А да и еще вопрос. Когда сервер принял данные а клиент потом перестал отправлять, может ли сервер как нибудь об этом узнать? Или он все время будет его слушать?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.09.2012, 12:51
Ответы с готовыми решениями:

Передача файлов через несколько портов
У меня проблема. Пыталась найти реализацию передачи файла через несколько портов. Linux, client-server, linux socket Необходимо...

Как задать несколько подключаемых портов на сервере?
Вот код моего чуда, хотелось бы узнать как можно подключится к нескольким портам (в дальнейшем будут использоваться как комнаты). Сервер...

Сканер udp портов удаленного доступа
Подскажите, есть ли такой софт, чтобы можно было смотреть кто подключен к серверу с определенным udp, а именно ip адреса клиентов и можно...

8
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
15.09.2012, 16:58
https://www.cyberforum.ru/c-li... ost2530913
Программирование сокетов, ругается код
0
3 / 3 / 1
Регистрация: 15.09.2011
Сообщений: 104
17.09.2012, 02:01  [ТС]
Спасибо конечно, но там в примере создается сокет и ему соответствует только один порт, поэтому можете рассказать что к чему именно по-моему вопросу
0
18 / 18 / 3
Регистрация: 28.06.2010
Сообщений: 77
17.09.2012, 05:38
а что останавливает создать 2 сокета?
2
3 / 3 / 1
Регистрация: 15.09.2011
Сообщений: 104
17.09.2012, 11:57  [ТС]
Цитата Сообщение от Alex_La Посмотреть сообщение
а что останавливает создать 2 сокета?
А, ну то есть можно сделать так, чтобы было: 1 сокет=1 порт? Тоесть тогда проблема решается просто создание двух сокетов? А на стороне приемника он может отдельно принимать из одного порта, отдельно из другого?
0
Модератор
 Аватар для vxg
3406 / 2177 / 354
Регистрация: 13.01.2012
Сообщений: 8,444
17.09.2012, 12:54
посылайте при помощи одного сокета на какой угодно адрес и порт через sendto. приему через recvfrom вообще все равно откуда и с какого порта пришло.
0
18 / 18 / 3
Регистрация: 28.06.2010
Сообщений: 77
18.09.2012, 05:40
Цитата Сообщение от 0xDC Посмотреть сообщение
А, ну то есть можно сделать так, чтобы было: 1 сокет=1 порт? Тоесть тогда проблема решается просто создание двух сокетов? А на стороне приемника он может отдельно принимать из одного порта, отдельно из другого?
да, в данном случае у меня так работает программа, с двумя сокетами. принимает от устройств сообщения. так сказать серверная часть, а на клиенте один сокет. сервер принимает данные и отправляет на клиента. причем на сервере открыто 3 порта: 2 на прием, 1 на передачу
1
3 / 3 / 1
Регистрация: 15.09.2011
Сообщений: 104
21.09.2012, 12:22  [ТС]
Ок, всем спасибо, почти разобрался вот код. Все как и хотел. Клиент отправляет на два разных порта, сервер принимает сообщения с двух разных портов.
Вот код. Сервер
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
93
94
95
96
97
98
99
100
//------------------------------------------------------------------------------
#include <winsock.h>
#include <stdio.h>
//Сервер
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data) || wsa_data.wVersion != 0x101) return -1;
 
    SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == INVALID_SOCKET) return -1;
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(2055);
    sa.sin_addr.S_un.S_addr = inet_addr("0");
 
 
    SOCKET s1 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s1 == INVALID_SOCKET) return -1;
 
    SOCKADDR_IN sa1;
    sa1.sin_family = AF_INET;
    sa1.sin_port = htons(666);
    sa1.sin_addr.S_un.S_addr = inet_addr("0");
 
 
 
 
    if (bind(s, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR) return -1;
 
    
    int sizeof_sa = sizeof(sa);
 
    char buffer[1024];
    int buffer_size = sizeof(buffer);
    if
    (
        recvfrom(s, buffer, buffer_size, 0, (SOCKADDR *)&sa, &sizeof_sa) ==
            SOCKET_ERROR
    )
        return -1;
    printf("message=%s\n", buffer);
 
      // Определяем IP-адрес клиента и прочие атрибуты
      HOSTENT *hst;
      hst=gethostbyaddr((char *)
            &sa.sin_addr,4,AF_INET);
      printf("+%s [%s:%d] new DATAGRAM!\n",
      (hst)?hst->h_name:"Unknown host",
      inet_ntoa(sa.sin_addr),
      ntohs(sa.sin_port));
 
  
 
if (bind(s1, (SOCKADDR *)&sa1, sizeof(sa1)) == SOCKET_ERROR) return -1;
 
     
    
    int sizeof_sa1 = sizeof(sa1);
    
     
    if
    (
        recvfrom(s1, buffer, buffer_size, 0, (SOCKADDR *)&sa1, &sizeof_sa1) ==
            SOCKET_ERROR
    )
        return -1;
    printf("message2=%s\n", buffer);
 
 
 
 
    //************************************8
    
      // Определяем IP-адрес клиента и прочие атрибуты
      HOSTENT *hst1;
      hst1=gethostbyaddr((char *)
            &sa1.sin_addr,4,AF_INET);
      printf("+%s [%s:%d] new DATAGRAM!\n",
      (hst1)?hst1->h_name:"Unknown host",
      inet_ntoa(sa1.sin_addr),
      ntohs(sa1.sin_port));
   //*******************************************
 
 
    if (connect(s, (SOCKADDR *)&sa1, sizeof_sa1) == SOCKET_ERROR) return -1;
 
    char *msg = "QWEASD";
    if (send(s, msg, 7, 0) == SOCKET_ERROR) return -1;
 
    closesocket(s);
    closesocket(s1);
 
    WSACleanup();
 
    system("pause");
    return 0;
}
Клиент
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
//------------------------------------------------------------------------------
#include <winsock.h>
#include <stdio.h>
#include <string>
#include <iostream>
//------------------------------------------------------------------------------
int main(int argc, char* argv[])
{
    WSADATA wsa_data;
    if (WSAStartup(0x101, &wsa_data) || wsa_data.wVersion != 0x101) return -1;
 
    SOCKET s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (s == INVALID_SOCKET) return -1;
 
    SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(2055);
    sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 
 
SOCKADDR_IN sa1;
    sa1.sin_family = AF_INET;
    sa1.sin_port = htons(666);
    sa1.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 
 
 
  
 
 
    char *msg = "ZXCASD";
    if
    (
        sendto
        (
            s,
            msg, 7,
            0,
            (SOCKADDR *)&sa, sizeof(sa)
        ) == SOCKET_ERROR
    )
        return -1;
 
 
 
  
 
 
     char *msg1 = "ZXCASD1";
    if
    (
        sendto
        (
            s,
            msg1, 8,
            0,
            (SOCKADDR *)&sa1, sizeof(sa1)
        ) == SOCKET_ERROR
    )
        return -1;
 
 
 
 
 
 
 
 
 
 
 
 
    char buffer[1024];
    int buffer_size = sizeof(buffer);
    if
    (
        recvfrom(s, buffer, buffer_size, 0, 0, 0) ==
            SOCKET_ERROR
    )
        return -1;
    printf("message=%s\n", buffer);
 
    closesocket(s);
 
    WSACleanup();
 
    system("pause");
    return 0;
}
Такой вопрос. Почему в блоке где определяется порт с которого была произведена передача, не такой как в структуре sa, и sa1. То есть должны быть порты 2000 и 666 соответственно. А на деле каждый раз разные порты следующий на единицу больше. Объясните почему так?
И еще может ли по UDP сервер как то понять что клиент отключился? Заранее спасибо!
0
 Аватар для igorrr37
2869 / 2016 / 991
Регистрация: 21.12.2010
Сообщений: 3,721
Записей в блоге: 15
21.09.2012, 20:18
Почему в блоке где определяется порт с которого была произведена передача, не такой как в структуре sa, и sa1
В структуре sa задается порт сервера на который сообщение отправляется, порт же клиента через который он выходит в сеть задаёт система

Добавлено через 21 минуту
можно привязать вручную
C++
1
2
3
4
5
6
7
SOCKADDR_IN sa;
    sa.sin_family = AF_INET;
    sa.sin_port = htons(9999); // клиент будет выходить в сеть через порт 9999
    sa.sin_addr.S_un.S_addr = inet_addr("0");
    if (bind(s, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR) return -1; // привязка сокета к локальному порту
    sa.sin_port = htons(2055);
    sa.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2012, 20:18
Помогаю со студенческими работами здесь

Проброс UDP-портов в Kerio WinRoute
Добрый вечер, уважаемые коллеги! Администрирую сеть малого офиса. Схема сети примитивна до безобразия, но для наглядности:...

Прием дейтаграмм UDP с разных портов
необходимо создать несколько UDP сокетов делаю в цикле, но при этом некоторые не создаются, и каждый раз рамдомно почему такое...

Перечисление UDP портов на локальном компьютере.
Этот скрипт перечисляет только порты для одного сетевого адаптера: #include &quot;stdafx.h&quot; #include &quot;stdio.h&quot; #include...

Virtualhost на несколько портов
день добрый, можно ли организовать прослушивание нескольких портов при создании virtualhost? например: &lt;VirtualHost *:80, *:443&gt;

Передача файлов через несколько портов
У меня проблема. Пыталась найти реализацию передачи файла через несколько портов. Linux, client-server, linux socket Необходимо...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru