Я пытаюсь вставить в структуру IP-адрес подключения и номер его соединения #, например, если IP 123.123.12 подключается 2 (два) раза, то для этого обновите номер [Соединения] в структуре. IP (123.123.12).
У меня есть следующий код, который должен работать:
Код: Выделить всё
// the struct
typedef struct {
int id; // is this useful anyway?
char *ip;
int connNumbers;
}test_sock;
// init struct
test_sock holder[5000];
int len = 0;
// the function
void AddtoStruct(char *ip)
{
if (len == 0) //if empty, insert.
{
len++;
holder->id = len;
holder->ip = ip;
holder->connNumbers = 1; //1 conexiune
return;
}
for (int i = 0; iid != 0) //check if its the same id !?
{
//Exista deja in structura , doar increase connNumbers;
if (strcmp(ip, holder->ip) == 0)
{
holder++;
holder->connNumbers++;
holder->id = antiddos_len;
holder->ip = ip;
return; // should return or not ?!
}
else{ //new IP, insert into struct.
len++; // COUNT AGAIN ?
holder->id = len;
holder->ip = ip;
holder->connNumbers = 1; // 1 connection
return; // should return or not ?!
}
}
}
}
Проверьте новый входящий IP, если он УЖЕ в структуре, затем увеличьте количество соединений для этого ip.
Если новый входящий IP НЕ находится внутри структуры, вставьте его, и если он снова подключится, конечно увеличьте количество соединений.
/>Ниже я собрал минимальный пример, который вы можете без проблем запустить на компьютере с Windows, используя Visual Studio (я использовал 2013).
Код: Выделить всё
#include "stdafx.h"
#include
#include
using namespace std;
// the struct
typedef struct {
int id; // is this useful anyway?
char *ip;
int connNumbers;
}test_sock;
// init struct
test_sock holder[5000];
int len = 0;
// the function
void AddtoStruct(char *ip)
{
if (len == 0) //if the struct is empty, insert.
{
len++;
holder->id = len;
holder->ip = ip;
holder->connNumbers = 1; //1 conexiune
cout
Подробнее здесь: [url]https://stackoverflow.com/questions/32401277/c-structure-declaration-and-usage-to-hold-ip-connections[/url]
Мобильная версия