gpt4 book ai didi

c - TCP接收问题

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

我正在从客户端向“服务器”发送一些数据。这只是一个 TCP 连接,因此一旦它们连接起来,流就会打开,直到我关闭它。无论如何,我将用户名发送到服务器。服务器测试这是否是有效的用户名,然后发回消息成功或失败。如果它不是有效的用户名,服务器会重新监听,客户端会重新请求用户名进行测试,直到您成功登录。我遇到的问题是,如果我输入错误的用户名,它会正确发回响应并要求我重新发送新的用户名。但是,当我现在输入正确的用户名时,它失败了。然后无论它下次发送什么,它都会成功,因为我之前已经发送过它,但它就像在等待,直到我再次输入。有谁知道如何解决这个问题?我对 C 很陌生。我尝试在每次循环后重置所有变量,但它仍然不起作用。 (是的,我知道 UDP 是完成此任务的更好选择……它是规范的一部分)这是服务器循环

int loggedIn = 0;
char username[MAX];
char status[10];
int statusLen=0;
int counter = 1;
while(!loggedIn){
// receive username
counter = recv(clientSock, username, MAX - 1, 0);
username[counter] = '\0';
printf("%s\n", username);

// check if username is in list
//if in the list, send success
if(strcmp(username,"test1234") == 0){
strcpy(status,"success");
statusLen = sizeof(status);
send(clientSock, status, statusLen,0);
loggedIn = 1;
}else { //if not in the list, send error and recv again
strcpy(status,"fail");
statusLen = sizeof(status);
send(clientSock, status, statusLen,0);
memset(status,0,statusLen);
}
}
printf("YOU MADE IT FINALLY BUDDY\n");
//send accounts

这是客户端循环

char username[20];
//verify login
int loggedIn = 0;
int counter = 0;
char status[10];
while(!loggedIn){
printf("Please login with your username: \n");
scanf(" %s",username);
//send username to the server
int usernameLen = strlen(username);
send(serverSock, username, usernameLen,0);
//recieve from the server
counter = recv(serverSock, status, 9, 0);
status[counter] = '\0';
//if success
if(strcmp(status, "success") ==0){
loggedIn = 1;
} else {//else reenter the username
printf("Error: Invalid Username!\n");
memset(username,0,sizeof(username));
memset(status,0,sizeof(status));
counter = 0;
}
}

最佳答案

发送的字符串大小可以是字符数,而不是字符串大小。
在代码中:

statusLen = sizeof(status);  

你可以这样做

statusLen = strlen(status);  

as strlen 计算字符数,而不是字符串的大小。 C 中字符串内存大小和字符数不一定相同。
您可以使用 gets 而不是 scanf 读取字符串。
scanf 每次发现空格时都会中断字符串。
MAX 多少钱?查看缓冲区是否足以容纳接收到的数据。
另请参阅使用 printf 是否收到正确的数据。我不确定,但看起来您也在开发服务器。
希望这可以帮助。我在您的代码中找不到任何其他错误。

关于c - TCP接收问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069865/

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