gpt4 book ai didi

c - 存储客户端结构并随后使用它

转载 作者:行者123 更新时间:2023-11-30 17:57:03 25 4
gpt4 key购买 nike

我像这样存储我的客户..

   int MAXCLIENTS = 4;
int ClientCount = 0;
int FreeSpot[MAXCLIENTS];

typedef struct CLIENTS_FD{

int sock;
struct sockaddr_in cli_adr;

}cliuse;

cliuse MYCLIENTS[4];

do{

NewSFD = accept(ServerFD,(struct sockaddr *) &cli_addr, &clilen);
if (NewSFD < 0)
{
if (errno != EWOULDBLOCK)
{
perror(" accept() failed");
DCSERVER = TRUE;
}
break;
}
if(ClientCount < MAXCLIENTS){
for(loop = 0; loop < MAXCLIENTS; loop++){

if(FreeSpot[loop]<0){

Clients[loop].sock = NewSFD;

break;

}

}

ClientCount++;
}
else
{

printf("Maximum Client Reached.\n");
char *sendtoclient = "Server full";
send(NewSFD, sendtoclient, strlen(sendtoclient),0);
close(NewSFD);
break;

}

ip = ntohl(cli_addr.sin_addr.s_addr);
printf(" Connection from %d.%d.%d.%d\n",
(int)(ip>>24)&0xff,
(int)(ip>>16)&0xff,
(int)(ip>>8)&0xff,
(int)(ip>>0)&0xff);
dlogs(ip);


}while(NewSFD != -1);

我知道我可以存储我的客户端文件描述符,但是我如何存储我的客户端结构并在之后使用它我想向它发送消息?..假设我想向 IP 为 192.168.5.10 的客户端发送消息。

谢谢。

最佳答案

我认为您错过了有关网络编程的一些重要观点。也许你应该阅读this了解更多详细信息和如何开始的信息。

尽管如此accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)将填充客户端地址结构,这是第二个参数( struct sockaddr *addr )。然后,您可以轻松地将此地址添加到 CLIENTS_FD 结构中。

Clients[loop].sock = NewSFD; 

Clients[loop].cli_adr = cli_addr;

假设 Clients 是 cliuse (或 struct CLIENTS_FD )。

无论如何,就像上面一些评论中提到的那样,您不需要在任何地方存储这个地址。您与客户沟通所需的只是其 sockfd (由accept返回)。

此外,您的代码中可能存在一些错误:

int FreeSpot[MAXCLIENTS];

未初始化,因此当您尝试检查它时

if(FreeSpot[loop]<0)

这可能会导致错误的行为。你可以简单地写 int FreeSpot[MAXCLIENTS] = {0};然后你应该在某个地方(可能在 if(FreeSpot[loop]<0) 语句内)添加类似这样的 FreeSpot[loop] = 1;在下次检查之前正确设置它。

int MAXCLIENTS = 4; 

int FreeSpot[MAXCLIENTS];

自 C99 起,可以使用常量以外的其他内容来声明表。这称为 VLA(可变长度数组)。不过,就你的情况而言,我认为没有必要使用 VLA。试试#define MAXCLIENTS 4相反(如上面一些评论中所建议的)。

要写入客户端,从 do-while 循环返回后,您可以简单地使用如下所示的内容:

send(Clients[i].sock, msg, len, flags);

其中 i 是您的客户端编号(范围 0-3),再次假设客户端为 cliuse (或struct CLIENTS_FD)。

关于c - 存储客户端结构并随后使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13042107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com