【发布时间】:2014-11-22 05:32:10
【问题描述】:
我正在从客户端向“服务器”发送一些数据。这只是一个 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;
}
}
【问题讨论】: