Форум программистов, компьютерный форум, киберфорум
C++: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811

Прием и отправка данных в разных потоках

05.09.2014, 18:41. Показов 1479. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

есть сервер который принимает данные:

Добавлено через 7 минут
Здравствуйте!

есть сервер который принимает данные:

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
int __cdecl main(void) 
{
    setlocale(LC_ALL, "Russian");
    WSADATA wsaData;
    int iResult;
 
    SOCKET ListenSocket = INVALID_SOCKET;
    SOCKET ClientSocket = INVALID_SOCKET;
 
    struct addrinfo *result = NULL;
    struct addrinfo hints;
 
    int iSendResult;
    unsigned char recvbuf[DEFAULT_BUFLEN];
    int recvbuflen = DEFAULT_BUFLEN;
   
    начало:
    // Initialize Winsock
    iResult = WSAStartup(MAKEWORD(2,2), &wsaData);
    if (iResult != 0) {
        printf("WSAStartup failed with error: %d\n", iResult);
        return 1;
    }
 
    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;
    hints.ai_flags = AI_PASSIVE;
 
    // Resolve the server address and port
    iResult = getaddrinfo(NULL, DEFAULT_PORT, &hints, &result);
    if ( iResult != 0 ) {
        printf("getaddrinfo failed with error: %d\n", iResult);
        WSACleanup();
        return 1;
    }
 
    // Create a SOCKET for connecting to server
    ListenSocket = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
    if (ListenSocket == INVALID_SOCKET) {
        printf("socket failed with error: %ld\n", WSAGetLastError());
        freeaddrinfo(result);
        WSACleanup();
        return 1;
    }
 
    // Setup the TCP listening socket
    iResult = bind( ListenSocket, result->ai_addr, (int)result->ai_addrlen);
    if (iResult == SOCKET_ERROR) {
        printf("bind failed with error: %d\n", WSAGetLastError());
        freeaddrinfo(result);
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
 
    freeaddrinfo(result);
 
    iResult = listen(ListenSocket, SOMAXCONN);
    if (iResult == SOCKET_ERROR) {
        printf("listen failed with error: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
 
    // Accept a client socket
    ClientSocket = accept(ListenSocket, NULL, NULL);
    if (ClientSocket == INVALID_SOCKET) {
        printf("accept failed with error: %d\n", WSAGetLastError());
        closesocket(ListenSocket);
        WSACleanup();
        return 1;
    }
 
    // No longer need server socket
    closesocket(ListenSocket);
 
    // Цикл приема данных
    _beginthread(Запуск, 0, NULL);// Запускаю поток
    do {
        
        cout << "Принимаем пакет-  "<< endl;
        
 
        iResult = recv(ClientSocket, (char*)recvbuf, sizeof recvbuf, 0);// получение данных в буфер
 
        int идинтификатор_пакета = ( recvbuf[1]& 0xC0) >> 6;
        cout << "идинтификатор_пакета- " << идинтификатор_пакета << endl; 
Ну и т.д.....
второй поток:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void Запуск(void* pParams)
{
    cout << "завести? y/n" << endl;
    while (1)
    {
     запуск = _getche();
    if (запуск == 'y')
                {
                    unsigned char запуск1[]={0x02, 0x0D, 0x10, 0x00, 0x00, 0x00, 0x28, 0xF8};
                    iSendResult = send(ClientSocket, (char*)запуск1, 8, 0);
                    запуск = 'n';
 
                }
 
    
    }
}
ошибка:
Ошибка 5 error C2065: ClientSocket: необъявленный идентификатор f:\проекты с++\сервет от29.08_2\сервет от29.08_2\сервет от29.08_2.cpp 402
Ошибка 4 error C2065: iSendResult: необъявленный идентификатор f:\проекты с++\сервет от29.08_2\сервет от29.08_2\сервет от29.08_2.cpp 402

Как сделать отправку независимо от основного потока?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2014, 18:41
Ответы с готовыми решениями:

WSARecv, WSASend - использование в разных потоках
Если работать с сокетом асинхронно, используя один поток на чтение, а другой на запись, требуется ли использовать мьютекс для синхронизации...

Прием и отправка пакетов
Всем привет! Нужно отправить определенной структуры пакет серверу на порт 28000. Так выглядит структура пакета: ...

Прием и отправка данных на COM-порт
Всем доброго времени суток. Пишу программу для принятия данных по ком-порту. В принципе машина принимает данные и сохраняет их в...

3
567 / 198 / 70
Регистрация: 25.05.2012
Сообщений: 816
08.09.2014, 05:12
Цитата Сообщение от eagl69 Посмотреть сообщение
ошибка:
Ошибка 5 error C2065: ClientSocket: необъявленный идентификатор f:\проекты с++\сервет от29.08_2\сервет от29.08_2\сервет от29.08_2.cpp 402
Ошибка 4 error C2065: iSendResult: необъявленный идентификатор f:\проекты с++\сервет от29.08_2\сервет от29.08_2\сервет от29.08_2.cpp 402
Ну все верно, они ведь объявлены в другой функции.

Цитата Сообщение от eagl69 Посмотреть сообщение
Как сделать отправку независимо от основного потока?
Передать значения параметров в поток, либо объявить общие используемые переменные глобально.
0
11 / 15 / 8
Регистрация: 12.10.2011
Сообщений: 811
09.09.2014, 06:21  [ТС]
Понятно... получилось...
А как открыть во втором потоке другой порт?... нужно чтобы было 2 потока и слушали 2 порта...
0
И целого heap'а мало
 Аватар для Andrej
96 / 57 / 17
Регистрация: 31.07.2014
Сообщений: 291
10.09.2014, 00:23
Цитата Сообщение от eagl69 Посмотреть сообщение
А как открыть во втором потоке другой порт?
Так же как и первый. Работа с потоками - это как создание Змей Горыныча. Вроде тело общее, но мозги в головах везде свои.
О, ну ещё и ходить неудобно. Одна башка хочет налево, другая назад, третья - вообще хочет постоять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.09.2014, 00:23
Помогаю со студенческими работами здесь

Отправка и прием структуры данных
Как можно организовать передачу структуры, допустим User.ID,User.Phone,User.OtherParapmetrs на сервер, и как их правильно принять,...

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

TCPListener синхронный (прием и отправка данных)
Делаю программу по отправке данных по TCP с такими характеристиками: Тип сетевых компонентов: TCPclient, TCPlistener синхронный; Способ...

Прием\Отправка и обработка данных в USART STM32F407VG
Всем доброго времени суток Стоит такая задача:со считывателя RFID приходят данные на порт МК USORT2 далее МК должен обработать данные и...

Прием и отправка данных в стороннее консольное приложение
Всем доброго времени суток. Не нашёл раздела для с#, решил создать здесь. Проблема следующая есть консольное приложение, которое...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
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 - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru