Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
1 / 1 / 0
Регистрация: 04.08.2021
Сообщений: 193
1

Два сокета в разных потоках на одном порту

27.05.2022, 16:00. Показов 4883. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день

У меня имеется несколько потоков по отправке и получению данных. Один поток отправляет пакеты устройству на определенный адрес и порт, а в другом потоке от устройства нужно получать служебные ответы, которые идут на порт, с которого отправлялись пакеты.

То есть получается если я отправляю на порт 5555, то и для получения ответов сокету мне нужно указать тоже порт 5555. Но в таком случае второй сокет не работает, хоть они и в разных потоках.

Как можно решить данную проблему?
Спасибо.

Сокеты создаю вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
SOCKET udpSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
 
    if (udpSocket == INVALID_SOCKET)
        return closeSocket("Failed creating UDP socket in func", &udpSocket);
 
    SOCKADDR_IN addr;
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(51859);
 
    BOOL opt = TRUE;
    if (setsockopt(udpSocket, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, sizeof(opt)))
        return closeSocket("Set opt SO_REUSEADDR failed", &udpSocket);
 
    if (::bind(udpSocket, (SOCKADDR*)&addr, sizeof(addr)) != NO_ERROR)  // без :: компилятор берет функцию из стандартной библиотеки, а не winsock
        return closeSocket("UDP socket receiver bind failed", &udpSocket);
 
    u_long iMode = 0; //при iMode = 0 блок режим
    if (ioctlsocket(udpSocket, FIONBIO, &iMode) != NO_ERROR)
        return closeSocket("Set opt ioctsocket failed", &udpSocket);
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.05.2022, 16:00
Ответы с готовыми решениями:

Два сокета на одном ip и порту
Добрый день. Создаю сокет для отправки в другую сеть на свой ip и конкретный порт. И нужно...

Qt клиент и сервер в одном консольном приложении в разных потоках
Доброго времени суток, уважаемые форумчане! Пытаюсь написать консольное приложение, которое...

Два vlan на одном порту
Подскажите, есть свитч 2 уровня, на нем 5 портов,в одном роутер в других пк. По умолчанию все...

Два принтера на одном com порту
В общем такая трабла: есть два принтера, которые работают через som порт. Нужно чтобы они печатали...

Объединить два exe файла в разных потоках
как объединить два exe файла в разных потоках? Объединяю с помощью HxDen, но второй exe не будет...

3
COM‐пропагандист
859 / 768 / 147
Регистрация: 18.12.2014
Сообщений: 2,195
Записей в блоге: 4
27.05.2022, 19:53 2
Два сокета зачем? Можно с одного и отправлять, и принимать данные.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
29.05.2022, 21:28 3
Цитата Сообщение от Horwood Посмотреть сообщение
Как можно решить данную проблему?
Работать с одним сокетом в разных потоках.
0
0 / 0 / 0
Регистрация: 31.05.2022
Сообщений: 1
31.05.2022, 16:48 4
Просто работай с одним сокетом


Ник addafruits зарегистрирован!
0
31.05.2022, 16:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2022, 16:48
Помогаю со студенческими работами здесь

Цвет в TextBox(в одном два разных)
Например текст Kill all в TextBox. Возможно ли что бы в этом TextBox(в одном!!!) Kill было...

Закрытие потерянного сокета на порту
получаю сокет: socket привязываю: bind настраиваю: listen ... setsockopt работаю асинхронно:...

Два разных попапа на одном скрипте не работают
Установил скрипт попапа с этой страницы...

Два графика в разных масштабах на одном TChart
Возникла необходимость разместить два графика на одном TChart, причем первый имеет Y в районе 1е6,...

Как в одном активити вывести два разных View?
Привет! Изучаю книгу по созданию игровых программ для андроида. Создаю View с помощью SurfaceView и...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru