【发布时间】:2015-04-13 18:42:09
【问题描述】:
我真的很抱歉,但不知道给它起什么名字。
我现在在做什么:
char ipstr[INET6_ADDRSTRLEN];
struct sockaddr_in *s = (struct sockaddr_in *)&addr;
inet_ntop(AF_INET, &s->sin_addr, ipstr, sizeof ipstr);
因此,如果我打印出我有来自刚刚连接到服务器的客户端的 IP。
现在这就是我认为我做的很愚蠢的地方。截至目前,我使用它作为 ID 来识别下标(刚刚连接的客户端)。但是我有几个问题,主要是,如果我偶然得到两个相同的地址会发生什么(作为一个愚蠢的例子,我小心地使用自己的代码,因为我连接到自己,因此使用 127.0.0.1 )。
我想:我可以同时输入地址和端口来识别谁是订阅者。
因此想到了向该缓冲区添加一个 int 的想法。显然,我必须创建一个稍微大一点的缓冲区,但问题是,我真的不知道如何......将 int “放入”其中。
如果有人能告诉我一个更好的方法来识别客户/订阅者,我会很高兴,我想了很多愚蠢的想法,而且都给了这样的小麻烦。
加上这个,我当然知道这个缓冲区创建后端口号是多少,所以我想到了做
char nombreSubscriptor[INET6_ADDRSTRLEN+sizeof(int)];
但是如果我这样做了,我相信它不会有足够的空间,一旦我将 int 更改为 string 或 char 数组或其他任何东西。
【问题讨论】:
-
你试过的代码在哪里?
-
我格式不对,改了。我试过 char nombreSubscriptor[INET6_ADDRSTRLEN+sizeof(int)];我认为这是一个非常糟糕的想法(而且它显然不起作用),但是我发现的所有内容都是循环遍历每个数字以将其放入 ansii,然后将该字符串/字符数组放入更大的数组中。再说一次,因为我相信这一切都只是一个糟糕的主意,所以我在这里问@Deanie