gpt4 book ai didi

c - 服务器验证凭据(套接字编程)

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

首先,我是c初学者。该程序模拟客户端通过端口 8000 上的 telnet 连接到的服务器,并为其提供用户名和密码,服务器将验证它们。我成功从客户端获取了用户名,但在验证它时遇到了一些问题。我需要将用户名与凭据列表进行比较,但它似乎不起作用。这是我到目前为止编写的代码...

#include <stdio.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <string.h>

int main()
{

char * credentialsList[7][2] = {{"Alice","abcdef"}, {"Bob","1234567"}, {"Cindy","qwerty"}, {"David","abababab"}, {"Eve", "cdefgh"}, {"Frank","7654321"}, {"George", "12341234"}};
int serverSocket=socket(AF_INET, SOCK_STREAM, 0);
int new_socket, i;
char *message, client_message[10];
struct sockaddr_in server, client;
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(8000);
bind(serverSocket, (struct sockaddr *)&server, sizeof(server));
listen(serverSocket,2);
int c = sizeof(struct sockaddr_in);
new_socket = accept(serverSocket, (struct sockaddr *)&client, (socklen_t*)&c);
message = "Welcome! You Are Now Connected To The Server.\n\n";
write(new_socket, message, strlen(message));
message = "Please Enter A Valid Username: ";
write(new_socket, message, strlen(message));
recv(new_socket, client_message, 10, 0);
for (i=0; i<7; i++)
{
if (strcmp(credentialsList[i][0], client_message) == 0)
{
// TO DO
puts("GOT YOU");
}
}
return 0;
}

提前致谢:)

最佳答案

在 C 编程中,字符串将以 NULL 字符终止(即“\0”,其十六进制值为 0x00)。所以 @juhist 说要使用 NULL 字符结束接收到的数据,这里我将简单地用 NULL 字符清除整个 client_message[] 数组,这样如果我们接收到 ,假设 8 个字符,第 9 个字符将由 NULL 字符终止确保这是一个字符串

memset(client_message,0x00,sizeof(client_message));
recv(new_socket, client_message, 10, 0);
for (i=0; i<7; i++)
{
if (strcmp(credentialsList[i][0], client_message) == 0)
{
// TO DO
puts("GOT YOU");
}
}

关于c - 服务器验证凭据(套接字编程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29183373/

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