Ich habe tun Socket-Netzwerk in C, für eine Anwendung, die ein Passwort von der Client-Seite für die Verifikation auf dem Server nehmen wird. Ich habe alles eingerichtet und die Sockets kommunizieren, aber wenn ich eine Zeichenfolge über und benutze strcmp() die Zeichenfolgen, obwohl sie beim Ausdruck identisch ist, wird nicht 0 (was ich glaube, dass die Strings sind gleich) wie so:C - Socket-Netzwerk - String's wird keine Gleichheit erzeugen
Beachten Sie, dass die Client- und Server-Seite separate Programme sind, die über localhost auf meinem Computer laufen.
/*Client Side */
char password[64] = {0};
fgets(password, 64, stdin);
write(sockfd, password, 64);
/*Server Side */
char password[64] = "password";
char password_buffer[64];
read(newsockfd, password_buffer, 64);
if(strcmp(password, password_buffer) != 0)
{
printf("Password Incorrect\n");
{
else
{
printf("Password correct\n");
}
Jede Hilfe würde sehr geschätzt werden. Es ist mir aufgefallen, dass die Verwendung von bzero oder memset involviert sein könnte, obwohl ich nicht sicher bin, wie diese beteiligt sind.
Sie ignorieren den Rückgabewert von 'lesen', so dass Sie keine Ahnung haben, wie viele Bytes Sie lesen. Wie erwarten Sie, dass "strcmp" weiß, wie das geht? –
'lesen' kann weniger als 64 Bytes lesen. Es gibt die Anzahl der gelesenen Bytes zurück. Wenn es nicht 64 ist, müssen Sie mit dem Rest – fukanchik
wahrscheinlich ein Problem String-Kündigung wiederholen. Untersuche den 'password_buffer'-Speicher nach dem' read'. Und ich würde es auch auf alle 0s initialisieren und nur 63 Bytes lesen, um sicherzustellen, dass der letzte '\ 0' ist. – yano