【发布时间】:2015-12-26 15:35:53
【问题描述】:
我在尝试用 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”错误(因为它已断开连接)。
【问题讨论】:
-
您确定“客户”已正确发送密码吗?
-
您确定客户端没有问题吗?您是否尝试过从 read(client,parola,sizeof(parola))
-
@SACHINGOYAL 给我一点时间来编辑和添加一些细节(客户永远不会发送到消息)
-
@KLibby 在打印行代码之后,我得到类似“user-”的东西;我也试过没有这种情况,同样的问题。
标签: c tcp client-server read-write