我正在将一些数据从客户端发送到“服务器”。这只是一个tcp连接,所以一旦连接,流将打开,直到我关闭它。无论如何,我发送一个用户名到服务器。服务器测试这是否是有效的用户名,然后发回消息成功或失败。如果它不是有效的用户名,则服务器重新连接,并且客户端再次请求用户名以再次测试,直到您成功登录。我遇到的问题是如果我输入了一个错误的用户名,它会正确地发送回应,并要求我重新发送一个新的。但是,当我现在输入正确的用户名时,它会失败。然后无论下一次发送什么,它都会成功,因为我之前发送过它,但它像等待,直到我再次进入。有没有人有任何想法如何解决这个问题?我对C.I很新,在每个循环之后尝试重置所有变量,但它仍然不起作用。 (是的,我知道UDP是完成这个任务的方式更好的选择..........其规范的一部分)这里是服务器循环TCP接收问题
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;
}
}
感谢您的意见!我会给这些尝试,让你知道 – user3704079 2014-11-21 21:09:24
你是对的!非常感谢。 strlen是问题。由于scanf,我也在寻找stdin,但是这个工作很完美..再次感谢你 – user3704079 2014-11-21 21:14:20
不客气。我很高兴它的作品!并感谢文本格式。我是新来的stackoverflow和混淆文本格式在这里。 – 2014-11-26 13:55:50