【问题标题】:How to add an int to a previously created buffer that contains a string如何将 int 添加到先前创建的包含字符串的缓冲区
【发布时间】: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

标签: c string tcp buffer


【解决方案1】:

识别客户的目的是什么?作为某个订阅者,稍后将使用哪个服务器发送信息?

每个订阅者都将与服务器建立唯一的连接,不是吗?我想您想唯一标识每个客户。您可以使用它们的套接字描述符跟踪连接。

您还可以定义一个结构列表,其中包含客户端的 IP 地址和连接到服务器的各种客户端的端口,而不是使用 IPAddr 和端口信息编码的数组元素。

【讨论】:

  • 是的,让我一点一点说: 识别客户端的目的:这样服务器进程可以在需要时作为客户端与客户端建立连接。||是的,每个订阅者都会有独特的联系。我已经可以分别发送和接收每一个。||我已经有一个结构的链接列表,在其中我存储了 IP、端口和其他一些东西(当然可以添加任何需要的东西,这就是我要求其他想法的原因,因为我相信通过地址识别它有点愚蠢, 0 经验,所以不确定)
  • 如果您想要的只是每个客户端的唯一标识符,为什么不在连接时创建一个新的标识符,例如 GUID?
猜你喜欢
  • 2015-08-16
  • 1970-01-01
  • 2021-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多