Форум программистов, компьютерный форум, киберфорум C++: Сети
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Работа с winsock https://www.cyberforum.ru/ cpp-networks/ thread3057043.html
Добрый день. Пытаюсь разобраться с winsock. С установкой соединения разобрался, но вот с приемом и передачей данных возникли некоторые трудности. При коннекте сервер ничего не присылает. Ни ответа ни ошибки. Будто где-то в цикле пытается бесконечное количество раз переподключиться. #define _WINSOCK_DEPRECATED_NO_WARNINGS #pragma comment(lib, "ws2_32.lib") #include <iostream> #include...
C++ WebSocket ws и wss
Добрый день. Есть вопрос как реализовать подключение по wss (своими силами на С++)?? WS подключение я реализовал (файлики с кодом приложил). WS_Utilities WS_connection_str ws_connector = {}; #if __WEBSOCKET == 1 // Функция подключения
C++ Начинаю работать с boost/asio Всем привет! Только начал работать с сетевым программированием. Сначала написал программу используя Winsock, и написал локальный Мессенджер. С этим вопросов не было, все получилось. Мне стало интересно теперь это реализовать через интернет соединение. В результате поиска понял, что тут уже лучше использовать boost/asio. Стандартный сервер/клиент c сайта boost. Тут начались проблемки: при вводе... https://www.cyberforum.ru/ cpp-networks/ thread3049228.html C++ Как клиенту узнать состояние Сервера? https://www.cyberforum.ru/ cpp-networks/ thread3043995.html
Добрый день. Подскажите как узнать, что сервер отвалился и более не доступен? может есть какие то запросы??? или гдето флаги установить... вобщем прошу меня направить в данном вопросе ))) Использую не блокирующий сокет. ( ioctlsocket(Socket, FIONBIO, &Mode), Mode = 1!) Несколько проблем: 1. Отключение сокета (клиента) происходит только по моему таймауту (что нет данных от сервера.) 2....
WINSOCK_API в блокирующем режиме зависает на функции recv C++
Всем привет! Пишу приложение для управления автосемплером по TCP протоколу, для чего использую сокеты в блокирующем режиме. Вот код моей функции для передачи/приёма сообщений от прибора: int CGAutosampler::LanPortConnectionAutosampler(CStringA* request, CStringA* response) { //Ключевые константы const char SERVER_IP = "192.168.0.207"; // IPv4-адрес сервера const short SERVER_PORT_NUM =...
C++ Как настроить общение программы по SNMP C++ Добрый день, уважаемые форумчане. Небольшое предисловие. Купили недавно блок питания, которым есть возможность управлять через протокол SNMP. Концептуально, что это за протокол и как работает я вроде более менее понял, информации много. Нашел даже подобное описание уровней, правда не особо понял, зачем это надо, ну да ладно. Проблема в следующем. Закупали мы его под конкретную задачу. Но я и... https://www.cyberforum.ru/ cpp-networks/ thread3035052.html
C++ Как перехватывать уведомления? В мобильной версии инсты при подписке на акк можно еще и уведомления при публикациях поставить, тогда при новых публикациях пользователя будут приходить уведомления, откуда эти уведомления берутся? Например для комментария я обращаюсь по адрессу https://i.instagram.com/api/v1/media/{mediaId}/comment/ и передаю вот такое json тело: { "comment_text":text, "idempotence_token":token,... https://www.cyberforum.ru/ cpp-networks/ thread3031180.html Получить список локальных адресов C++
Как можно получить все адреса в компьютеров в лок. сети? Например в сети есть 2 ПК. 192.168.2.1 192.168.2.102 Как получить эти адреса? Есть что нибудь кроме system("arp -a")? Windows; Visual Studio; c++
C++ Примеры использования CycloneSSL https://www.cyberforum.ru/ cpp-networks/ thread3029511.html
Здравствуйте, я не нашел примеров использования библиотеки CycloneSSL. Может у кого-то из вас есть пример работы с TLS 1.3 на c++ с использованием CycloneSSL?
C++ Нужно перевести бинарный код обратно в символы https://www.cyberforum.ru/ cpp-networks/ thread3027473.html
Я перевожу символьную строку в бинарный вид. Как можно перевести эту строку, содержащую бинарный код, обратно в символы (в изначально вводимую строку)? Пример реализации перевода в бинарный вид ниже. string str, str_old; cin >> str_old; for (char c : str_old) { bitset<8> bs(c); str = str + bs.to_string();
C++ Blockchain. Ошибка при обработке запроса (как я понял)
Нашел репозиторий на GitHub https://github.com/Winderton/xplatform по юлокчейну. Для взаимодействия используется p2p Simple Web Server. Когда пытаюсь подключиться с одного клиента к другому вылезает ошибка. Файл Miner.cpp: json j; j = server->config.port; for (int i = 0; i < peers.size() - 1; i++) { int port = peers; HttpClient client("localhost:" + std::to_string(port));...
C++ Отправлять пакеты через Npcap без Ethernet заголовка https://www.cyberforum.ru/ cpp-networks/ thread3020233.html
Здравствуйте! Есть ли способ отправлять пакеты с помощью Npcap без Ethernet заголовка? То есть передать системе IP пакет, чтобы она сама обернула его в кадр и сама воспользовалась ARP если нужно.
0 / 0 / 0
Регистрация: 05.06.2022
Сообщений: 39
0

Назначение адресов в сети - C++ - Ответ 16678624

05.01.2023, 17:12. Показов 4124. Ответов 6
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
ситуация1: сеть с роутером, в которой пк и распберри. Создаю сервер на распберри, вайфай роутер назначает адрес для пк 192.168.0.100, для распберри 192.168.0.101. Код из примера с сайта андрейолегович
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
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
 
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
 
int main() {
 
    char server_message[256] = "You have reached the server!";
 
    // create the server socket
    int server_socket;
    server_socket = socket(AF_INET, SOCK_STREAM, 0);
 
    // define the server address
    struct sockaddr_in server_address;
    server_address.sin_family = AF_INET;
    server_address.sin_port = htons(9090);
    server_address.sin_addr.s_addr = INADDR_ANY;
 
    // bind the socket to our specified IP and port
    bind(server_socket, (struct sockddr*) &server_address, sizeof(server_address));
 
    // second agrument is a backlog - how many connections can be waiting for this socket simultaneously
    listen(server_socket, 5);
 
    int client_socket;
 
    client_socket = accept(server_socket, NULL, NULL);
 
    // send the message
    send(client_socket, server_message, sizeof(server_message), 0);
 
    // close the socket
    close(server_socket);
 
    return 0;
}
Клиент на пк на питоне, адрес определил, какой дал роутер и вписал:
PythonВыделить код
1
2
3
4
5
6
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('192.168.0.101', 9090))
result = sock.recv(512)
print('tcp open', result)
sock.close()
все работает, сообщения пересылаются.

Ситуация 2: таже сеть, но вместо распберри ethernet модуль WCH с али, код
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
/********************************** (C) COPYRIGHT *******************************
 * File Name          : main.c
 * Author             : WCH
 * Version            : V1.0.0
 * Date               : 2022/05/31
 * Description        : Main program body.
 * Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
 * SPDX-License-Identifier: Apache-2.0
 *******************************************************************************/
/*
 *@Note
 TCP Server例程,演示TCP Server连接到客户端后接收数据并回传
 */
#include "string.h"
#include "debug.h"
#include "wchnet.h"
#include "eth_driver.h"
 
#define KEEPLIVE_ENABLE                1                //Enable keeplive function
 
u8 MACAddr[6];                                          //MAC address
u8 IPAddr[4] = { 192, 168, 0, 110 };                     //IP address
u8 GWIPAddr[4] = { 192, 168, 0, 1 };                    //Gateway IP address
u8 IPMask[4] = { 255, 255, 255, 0 };                    //subnet mask
u16 srcport = 8888;                                     //source port
 
u8 SocketIdForListen;                                   //Socket for Listening
u8 socket[WCHNET_MAX_SOCKET_NUM];                       //Save the currently connected socket
u8 SocketRecvBuf[WCHNET_MAX_SOCKET_NUM][RECE_BUF_LEN];  //socket receive buffer
u8 MyBuf[RECE_BUF_LEN];
 
 
/*********************************************************************
 * @fn      mStopIfError
 *
 * @brief   check if error.
 *
 * @param   iError - error constants.
 *
 * @return  none
 */
void mStopIfError(u8 iError)
{
    if (iError == WCHNET_ERR_SUCCESS)
        return;
    printf("Error: %02X\r\n", (u16) iError);
}
 
/*********************************************************************
 * @fn      TIM2_Init
 *
 * @brief   Initializes TIM2.
 *
 * @return  none
 */
void TIM2_Init(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure = { 0 };
 
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
 
    TIM_TimeBaseStructure.TIM_Period = SystemCoreClock / 1000000 - 1;
    TIM_TimeBaseStructure.TIM_Prescaler = WCHNETTIMERPERIOD * 1000 - 1;
    TIM_TimeBaseStructure.TIM_ClockDivision = 0;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
 
    TIM_Cmd(TIM2, ENABLE);
    TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    NVIC_EnableIRQ(TIM2_IRQn);
}
 
/*********************************************************************
 * @fn      WCHNET_CreateTcpSocketListen
 *
 * @brief   Create TCP Socket for Listening
 *
 * @return  none
 */
void WCHNET_CreateTcpSocketListen(void)
{
    u8 i;
    SOCK_INF TmpSocketInf;
 
    memset((void *) &TmpSocketInf, 0, sizeof(SOCK_INF));
    TmpSocketInf.SourPort = srcport;
    TmpSocketInf.ProtoType = PROTO_TYPE_TCP;
    i = WCHNET_SocketCreat(&SocketIdForListen, &TmpSocketInf);
    printf("SocketIdForListen %d\r\n", SocketIdForListen);
    mStopIfError(i);
    i = WCHNET_SocketListen(SocketIdForListen);                   //listen for connections
    mStopIfError(i);
}
 
/*********************************************************************
 * @fn      WCHNET_DataLoopback
 *
 * @brief   Data loopback function.
 *
 * @param   id - socket id.
 *
 * @return  none
 */
void WCHNET_DataLoopback(u8 id)
{
#if 1
    u8 i;
    u32 len;
    u32 endAddr = SocketInf[id].RecvStartPoint + SocketInf[id].RecvBufLen;       //Receive buffer end address
 
    if ((SocketInf[id].RecvReadPoint + SocketInf[id].RecvRemLen) > endAddr) {    //Calculate the length of the received data
        len = endAddr - SocketInf[id].RecvReadPoint;
    }
    else {
        len = SocketInf[id].RecvRemLen;
    }
    i = WCHNET_SocketSend(id, (u8 *) SocketInf[id].RecvReadPoint, &len);        //send data
    if (i == WCHNET_ERR_SUCCESS) {
        WCHNET_SocketRecv(id, NULL, &len);                                      //Clear sent data
    }
#else
    u32 len, totallen;
    u8 *p = MyBuf;
 
    len = WCHNET_SocketRecvLen(id, NULL);                                //query length
    printf("Receive Len = %02x\n", len);
    totallen = len;
    WCHNET_SocketRecv(id, MyBuf, &len);                                  //Read the data of the receive buffer into MyBuf
    while(1){
        len = totallen;
        WCHNET_SocketSend(id, p, &len);                                  //Send the data
        totallen -= len;                                                 //Subtract the sent length from the total length
        p += len;                                                        //offset buffer pointer
        if(totallen)continue;                                            //If the data is not sent, continue to send
        break;                                                           //After sending, exit
    }
#endif
}
 
/*********************************************************************
 * @fn      WCHNET_HandleSockInt
 *
 * @brief   Socket Interrupt Handle
 *
 * @param   socketid - socket id.
 *          intstat - interrupt status
 *
 * @return  none
 */
void WCHNET_HandleSockInt(u8 socketid, u8 intstat)
{
    u8 i;
 
    if (intstat & SINT_STAT_RECV)                                 //receive data
    {
        WCHNET_DataLoopback(socketid);                            //Data loopback
    }
    if (intstat & SINT_STAT_CONNECT)                              //connect successfully
    {
#if KEEPLIVE_ENABLE
        WCHNET_SocketSetKeepLive(socketid, ENABLE);
#endif
        WCHNET_ModifyRecvBuf(socketid, (u32) SocketRecvBuf[socketid],
        RECE_BUF_LEN);
        for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) {
            if (socket[i] == 0xff) {                              //save connected socket id
                socket[i] = socketid;
                break;
            }
        }
        printf("TCP Connect Success\r\n");
        printf("socket id: %d\r\n",socket[i]);
    }
    if (intstat & SINT_STAT_DISCONNECT)                           //disconnect
    {
        for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) {             //delete disconnected socket id
            if (socket[i] == socketid) {
                socket[i] = 0xff;
                break;
            }
        }
        printf("TCP Disconnect\r\n");
    }
    if (intstat & SINT_STAT_TIM_OUT)                              //timeout disconnect
    {
        for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) {             //delete disconnected socket id
            if (socket[i] == socketid) {
                socket[i] = 0xff;
                break;
            }
        }
        printf("TCP Timeout\r\n");
    }
}
 
/*********************************************************************
 * @fn      WCHNET_HandleGlobalInt
 *
 * @brief   Global Interrupt Handle
 *
 * @return  none
 */
void WCHNET_HandleGlobalInt(void)
{
    u8 intstat;
    u16 i;
    u8 socketint;
 
    intstat = WCHNET_GetGlobalInt();                              //get global interrupt flag
    if (intstat & GINT_STAT_UNREACH)                              //Unreachable interrupt
    {
        printf("GINT_STAT_UNREACH\r\n");
    }
    if (intstat & GINT_STAT_IP_CONFLI)                            //IP conflict
    {
        printf("GINT_STAT_IP_CONFLI\r\n");
    }
    if (intstat & GINT_STAT_PHY_CHANGE)                           //PHY status change
    {
        i = WCHNET_GetPHYStatus();
        if (i & PHY_Linked_Status)
            printf("PHY Link Success\r\n");
    }
    if (intstat & GINT_STAT_SOCKET) {                             //socket related interrupt
        for (i = 0; i < WCHNET_MAX_SOCKET_NUM; i++) {
            socketint = WCHNET_GetSocketInt(i);
            if (socketint)
                WCHNET_HandleSockInt(i, socketint);
        }
    }
}
 
/*********************************************************************
 * @fn      main
 *
 * @brief   Main program
 *
 * @return  none
 */
int main(void)
{
    u8 i;
 
    u32 len;
 
 
    Delay_Init();
    USART_Printf_Init(115200);                                    //USART initialize
    printf("TcpServer Test\r\n");
    printf("SystemClk:%d\r\n", SystemCoreClock);
    printf("net version:%x\n", WCHNET_GetVer());
    if ( WCHNET_LIB_VER != WCHNET_GetVer()) {
        printf("version error.\n");
    }
    WCHNET_GetMacAddr(MACAddr);                                   //get the chip MAC address
    printf("mac addr:");
    for(i = 0; i < 6; i++) 
        printf("%x ",MACAddr[i]);
    printf("\n");
    TIM2_Init();
    i = ETH_LibInit(IPAddr, GWIPAddr, IPMask, MACAddr);           //Ethernet library initialize
    mStopIfError(i);
    if (i == WCHNET_ERR_SUCCESS)
        printf("WCHNET_LibInit Success\r\n");
#if KEEPLIVE_ENABLE                                               //Configure keeplive parameters
    {
        struct _KEEP_CFG cfg;
 
        cfg.KLIdle = 20000;
        cfg.KLIntvl = 15000;
        cfg.KLCount = 9;
        WCHNET_ConfigKeepLive(&cfg);
    }
#endif
    memset(socket, 0xff, WCHNET_MAX_SOCKET_NUM);
    WCHNET_CreateTcpSocketListen();                               //Create TCP Socket for Listening
 
    while(1)
    {
        /*Ethernet library main task function,
         * which needs to be called cyclically*/
        WCHNET_MainTask();
        /*Query the Ethernet global interrupt,
         * if there is an interrupt, call the global interrupt handler*/
 
        if(WCHNET_QueryGlobalInt())
        {
            WCHNET_HandleGlobalInt();
        }
    }
}
где я вписываю любой адрес, и роутер показывает этот адрес и обращение происходит по нему. Как такое может быть? Я думал, что роутер исключительно назначает адреса

Вернуться к обсуждению:
Назначение адресов в сети C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.01.2023, 17:12
Готовые ответы и решения:

Реализация ARP (получение IP и MAC-адресов устройств внутри локальной сети) на c++
Реализация ARP (получение IP и MAC-адресов устройств внутри локальной сети) на c++ Есть ли у...

Список IP-адресов в локальной сети
Как, зная адрес и маску подсети, с помощью Windows API получить список IP всех хостов? ...

Вывод количество различных адресов сети
Здравствуйте, я недавно начал изучать C++ и столкнулся с такой задачкой: Дана маска подсети и n...

Как получить список всех IP-адресов из локальной сети?
Уже пробовал QNetworkInterface::allAddresses(), но он почему-то выводит только 4 адреса, которые по...

6
05.01.2023, 17:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.01.2023, 17:12
Помогаю со студенческими работами здесь

Назначение ip адресов
почему так важно назначать ip адреса что то вроде 192.168.0.1 почему нельзя типа 10.11.12.1?...

Назначение и распределение ip-адресов.
Доброго времени суток. Вот спроектировал (ради интереса) какую-то локальную компьютерную сеть, а в...

Назначение мультикастовых MAC адресов
Всем доброго времени суток, у меня возник вопрос по мультикастовой адресации. Допустим, есть...

Назначение компьютеру нескольких локальных ip-адресов
Здравствуйте. Необходимо назначить компьютеру с macOS Mojave несколько локальных IPv4-адресов. Не...

Возможно ли назначение несколько МАС адресов на одном компе?
Доброго времени суток!:) Я уже размещал этот вопрос на форуме но ошибся разделом. Суть дела: у...

Сканер сети, получение имен и IP-адресов компьютеров в сети
Доброго времени суток, дорогие форумчане! Хочу попробовать написать простенький сканер сети, что бы...

Как сделать в 3 и 4 сети протокол RIP и класс адресов чтобы был в 3-ей и 4-ой сети: (в Packet Tracer)
Ребят как сделать в 3 и 4 сети протокол RIP и класс адресов чтобы был в 3-ей и 4-ой сети: В ...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru