我正在研究服务器 - 多客户端聊天程序,并创建了一个方法,可以将服务器输入的输入打印到其各自的客户端。
方法:
void *admin_handler (void *ptr) {
char strBuf [100000];
const char strExit [20] = "Server: terminated.";
while(1) {
scanf ("%s", strBuf);
int i;
for (i=0; i < nClient; i++){
if (strcmp(strBuf,"Exit") == 0){
write (nFDList [i], strExit, strlen (strExit) + 1);
quick_exit (EXIT_SUCCESS);
}
else {
write (nFDList [i], strBuf, strlen (strBuf) + 1);
}
}
};
}
但是,当我在服务器端输入“Exit”时,它只会打印“Server:terminated”。到我打开的第一个客户端,当我输入任何其他内容时,它会将消息从服务器打印到所有客户端。如何让服务器将strExit打印到所有客户端,如strBuf?
注意:nFDList [i]是一个存储客户端的数组。
答案 0 :(得分:0)
要打印“服务器:已终止”。对于所有客户,我必须按如下方式修改我的代码:
void *admin_handler (void *ptr) {
char strBuf [100000];
const char strExit [20] = "Server: terminated.";
while(1) {
scanf ("%s", strBuf);
int i;
for (i=0; i < nClient; i++){
if (strcmp(strBuf,"Exit") == 0){
for (i=0; i < nClient; i++){
write (nFDList [i], strExit, strlen (strExit) + 1);
}
quick_exit (EXIT_SUCCESS);
}
else {
write (nFDList [i], strBuf, strlen (strBuf) + 1);
}
}
};
}
答案 1 :(得分:0)
正如您正确指出的那样,发送正常消息和关闭消息之间的唯一区别是发送中使用的文本,然后您可以通过仅发送一次来“制作真实的内容”逻辑,并操纵输入。
这是一个更干的建议替代方案:
void *admin_handler (void *ptr) {
char strBuf [100000];
char flagExit = 0;
const char strExit [20] = "Server: terminated.";
while(1) {
scanf ("%s", strBuf);
if (strcmp(strBuf, "Exit") == 0){
strncpy(strBuf, strExit, strlen(strExit));
flagExit = 1;
}
int i;
for (i=0; i < nClient; i++){
write (nFDList [i], strBuf, strlen (strBuf) + 1);
}
if (flagExit) {
quick_exit (EXIT_SUCCESS);
}
}
}