服务器处理的客户端命令C

Clients commands processed by the server C

本文关键字:命令 客户端 处理 服务器      更新时间:2023-10-16

我正在Win32 (c++)环境中构建一个服务器/客户端聊天应用程序,使用命名管道,我正在努力寻找一个更好的解决方案来处理客户端请求的命令(不是并发问题也不是同步)。我能想到的唯一解决办法是:

假设客户端只能向服务器发送一些命令,如:

-> Logon arg1 arg2
-> Register arg1 arg2
-> Chat_info 
-> Exit

现在,在服务器端必须处理信息,但是他如何捕获参数呢?

我想要完成的是与服务器的交互,而不是简单的回声响应,例如:作为客户端,我会发送:Logon Ricardo pass123服务器将检查用户名和密码是否有效。

谢谢你的帮助

我终于找到了一个更好的解决办法。

Server.c

while(1){
//...
printf("[SERVER] Waiting for a client... (ConnectNamedPipe)n");
    if(!ConnectNamedPipe(hPipe, NULL)){
        perror("Connection Error!");
        //exit(-1);
    }
    CreateThread(NULL,0,ListenClient,(LPVOID)hPipe,0,NULL);
}

每次客户端获得他的命名管道创建,以及获得一个新的线程,在"ListenClient"函数:

DWORD WINAPI ListenClient(LPVOID param) { ... }

,它将读取通过管道的信息,如:

ret = ReadFile(hPipe, buf, 256,(LPDWORD) &n, NULL);
if (!ret || !n)
    perror("Error reading the named pipe!");
buf[n] = ''; 

将有尽可能多的条件,每个客户端可以从服务器请求选项,如:

if(strcmp(buf, "Logon")==0)
{
 //process the resquest
}

if(strcmp(buf, "Register")==0)
{
 //process the request
}
and so on..

这样服务器将从缓冲区中读取并对发送的第一个参数进行简单的字符串比较。

谢谢大家,我希望它能帮助别人!