2015-04-13 2 views
1

Мне очень жаль, но я не знал, что назвать его.Как добавить int в ранее созданный буфер, который содержит строку

Что я делаю сейчас:

char ipstr[INET6_ADDRSTRLEN]; 
struct sockaddr_in *s = (struct sockaddr_in *)&addr; 
inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr); 

Так что, если я печатаю, что у меня есть IP-адрес от клиента, который просто подключен к серверу.

Теперь я верю, что делаю это глупо. На данный момент я использую это как идентификатор для идентификации субкриптора (только что подключенного клиента). Но у меня есть несколько проблем с этим, главное, что происходит, если случайно я получаю два одинаковых адреса (как тупой пример, я использую свой собственный код осторожно, так как я подключаюсь к себе, используя 127.0.0.1).

И я подумал: я мог бы указать адрес и порт, чтобы определить, кто является подписчиком.

И, таким образом, идея добавления int в этот буфер. Очевидно, мне придется создать немного больший буфер, но дело в том, что я действительно не знаю, как ... «положить» int.

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

Чтобы добавить к этому, я знаю, что номер порта после создания этого буфера конечно, поэтому я думал, что делать

char nombreSubscriptor[INET6_ADDRSTRLEN+sizeof(int)]; 

, но если бы я, что я считаю, что это не было бы места достаточно, как только я изменю int на string или char array или что угодно.

+0

Где код, который вы пробовали? – Deanie

+0

Я отформатировал его неправильно, изменил его. Я попробовал char nombreSubscriptor [INET6_ADDRSTRLEN + sizeof (int)]; Который я считаю, что это довольно ужасная идея (и это не работает явно), но, глядя вокруг, все, что я нашел, перебирает каждое число, чтобы поместить его в ansii, а затем помещать этот массив string/char в более крупный. И снова, так как я считаю, что все это всего лишь плохая идея, которую я задал здесь @Deanie – keont

ответ

0

В чем заключается цель идентификации клиента? Как какой-то абонент, с которым сервер будет отправлять информацию позже?

У каждого подписчика будет уникальное соединение с сервером, не так ли? Полагаю, вы хотите однозначно идентифицировать каждого клиента. Вы можете отслеживать соединения с помощью дескрипторов сокетов.

Вы также можете определить список структур, которые содержат IP-адрес клиента и порт различных клиентов, которые подключаются к серверу, а не один элемент массива, закодированный с помощью IPAddr и информации о порте.

+0

да, позвольте мне пойти понемногу: Цель идентификации клиента: поэтому серверный процесс может, когда это необходимо, как клиент и устанавливать соединение для клиента. Да, каждый абонент будет иметь уникальное соединение. Я уже могу отправлять и возвращать с каждым отдельно. || У меня уже есть связанный список структур, внутри одного я хранил IP, порт и несколько других вещей (и, конечно же, могу добавить что-то необходимое, вот почему я попросил другие идеи, так как я считаю, что идентифицировать по адресу это как-то немой , 0 опыт по этому не уверен) – keont

+0

Если все, что вы хотите, это уникальный идентификатор для каждого клиента, почему бы просто не создать новый идентификатор при подключении, например GUID? –

Смежные вопросы