Я столкнулся с проблемой, когда пытался обмениваться сообщениями между сервером и клиентом в C.
Сервер
char username[50],parola[50];
bzero(username,50);
strcpy(mTrimis,"Enter message");
//this is working fine
if(write(client,mTrimis,sizeof(mTrimis))<=0)
{
perror ("[server]Error1\n");
continue;
}
//this is working fine
if(read(client,username,sizeof(username))<=0)
{
perror("[server]Error1r\n");
continue;
}
bzero(parola,50);
bzero(mTrimis,500);
strcpy(mTrimis,"Enter password");
//this is working fine
if(write(client,mTrimis,sizeof(mTrimis))<=0)
{
perror ("[server]Error2\n");
continue;
}
//this "read" is not working
if(read(client,parola,sizeof(parola))<=0)
{
perror("[server]Error2\n");
continue;
}
bzero(mTrimis,500);
printf("%s-%s\n",username,parola);
Клиент
bzero(mTrimis,500);
bzero(mPrimit,500);
if(read(sd,mPrimit,sizeof(mPrimit))<0)
{
perror ("[client]Error1 client)\n");
return errno;
}
printf ("MESSAGE SERVER:\n%s\n",mPrimit);
if(read(0,mTrimis,sizeof(mTrimis))<0)
{
perror ("[client]error client-keyboard\n");
return errno;
}
if(write(sd,mTrimis,sizeof(mTrimis))<0)
{
perror ("[client]Error1 client->server\n");
return errno;
}
bzero(mTrimis,500);
bzero(mPrimit,500);
if(read(sd,mPrimit,sizeof(mPrimit))<0)
{
perror ("[client]Error2 cleint\n");
return errno;
}
printf ("MESSAGE SERVER:\n%s\n",mPrimit);
if(read(0,mTrimis,sizeof(mTrimis))<0)
{
perror ("[client] error2 client keyboard\n");
return errno;
}
if(write(sd,mTrimis,sizeof(mTrimis))<0)
{
perror ("[client]Error2 client->server\n");
return errno;
}
Итак, сервер запрашивает у клиента имя пользователя и получает его. Потом запрашивает пароль и тут (при втором "прочтении") не работает нормально. Он просто пропускает это «чтение», напечатает что-то вроде этого «user123-» и отключит клиента, потому что он достиг конца кода.
На стороне клиента он получает сообщение с запросом имени пользователя с сервера, затем клиент отправляет свое сообщение на сервер. Затем он получает второе сообщение с сервера, запрашивающее пароль, и не может отправить второе сообщение обратно на сервер, я получаю ошибку «error2 client-> server» (потому что он был отключен).