我有这个简单的服务器,5个客户端可以连接到。现在的问题是,我该如何决定谁现在正在说话? 它适用于一个客户端,因为它使用相同的i进行读取和发送。当有2个客户端连接时,我想发送一些与发送该消息的客户端相关联的唯一ID,以便在下次发送消息时,ID应该与珍贵消息的ID相同。哪位客户正在交谈?
连接,发送和接收完成的服务器代码的小片段。
while (true)
{
this->readingSockets = this->openSockets;
this->socketBind = select(getdtablesize(), &this->readingSockets, NULL, NULL, (struct timeval *)NULL);
if (FD_ISSET(sD, &this->readingSockets))
{
cD = accept(sD, (struct sockaddr *)&this->clientAdr,(socklen_t*) &this->sCadr);
FD_SET(cD, &this->openSockets);
continue;
}
for (int i=0; i<getdtablesize(); i++)
if (i != sD && FD_ISSET(i, &this->readingSockets))
{
this->socketBind = read(i, this->buf, sizeof(buf));
g1.cast(buf,id);//where i'd like to send that unique id
if (this->socketBind == 0)
{
FD_CLR(i, &this->openSockets);
close(i);
}
else
{
send(i,g1.getA(),g1.getSize(),0);
g1.setMsg(c);
}
}
}
此致敬意。
向导客户端正在监听... –
你确定你的循环是正确的吗?你是不是将循环计数器与文件描述符混合? –
@j_random_hacker,你必须进入万圣节的精神! –