当前位置: 技术问答>linux和unix
请教一个关于socket的小问题
来源: 互联网 发布时间:2015-10-15
本文导语: 这个问题我弄了一天,还是没弄明白 我写一个服务器/客户端 小程序, 功能是: 客户端输入用户名和密码,传送给服务器,服务器经过认证,返回给客户端一个结果值 客户端的一段程序如下: /**************...
这个问题我弄了一天,还是没弄明白
我写一个服务器/客户端 小程序,
功能是: 客户端输入用户名和密码,传送给服务器,服务器经过认证,返回给客户端一个结果值
客户端的一段程序如下:
/*****************/
int Authresult;
……
scanf("%s",InputUserName);
UserNameLen=strlen(InputUserName);
if( (write(KTS_sock,&UserNameLen,4)==0) )
break;
if( write(KTS_sock,InputUserName,UserNameLen+1)==0)
break ;
Passwd = getpass("Password:");
PasswdLen=strlen(Passwd);
if( (write(KTS_sock,&PasswdLen,4)==0) )
break;
if( write(KTS_sock,Passwd,PasswdLen+1)==0)
break ;
read(KTS_sock,&AuthResult,4);
printf("auth result is : %dn",AuthResult);
/************************************/
服务器上的程序如下
/**************************************/
if( (read(KTS_sock,&UserNameLen,4)==0) )
break;
if( read(KTS_sock,UserName,UserNameLen+1)==0)
break ;
if( (write(KTS_sock,&PasswdLen,4)==0) )
break;
if( write(KTS_sock,Passwd,PasswdLen+1)==0)
break ;
AuthResult=auth(UserName,Passwd);/*一个认证函数,返回成功或者1,失败0*/
read(KTS_sock,&AuthResult,4);
/**************************/
程序都可以编译运行,现在的问题是,客户端向服务器端写的四个数据,服务器都可以正常受到,但是客户端却收不到服务器送的 result 。
由于初学这个东西,对这里面还不是很清楚,不知道是阻塞I/O的什么问题还是什么原因,到了第五次传送的时候就失败了,也没有抱错
我写一个服务器/客户端 小程序,
功能是: 客户端输入用户名和密码,传送给服务器,服务器经过认证,返回给客户端一个结果值
客户端的一段程序如下:
/*****************/
int Authresult;
……
scanf("%s",InputUserName);
UserNameLen=strlen(InputUserName);
if( (write(KTS_sock,&UserNameLen,4)==0) )
break;
if( write(KTS_sock,InputUserName,UserNameLen+1)==0)
break ;
Passwd = getpass("Password:");
PasswdLen=strlen(Passwd);
if( (write(KTS_sock,&PasswdLen,4)==0) )
break;
if( write(KTS_sock,Passwd,PasswdLen+1)==0)
break ;
read(KTS_sock,&AuthResult,4);
printf("auth result is : %dn",AuthResult);
/************************************/
服务器上的程序如下
/**************************************/
if( (read(KTS_sock,&UserNameLen,4)==0) )
break;
if( read(KTS_sock,UserName,UserNameLen+1)==0)
break ;
if( (write(KTS_sock,&PasswdLen,4)==0) )
break;
if( write(KTS_sock,Passwd,PasswdLen+1)==0)
break ;
AuthResult=auth(UserName,Passwd);/*一个认证函数,返回成功或者1,失败0*/
read(KTS_sock,&AuthResult,4);
/**************************/
程序都可以编译运行,现在的问题是,客户端向服务器端写的四个数据,服务器都可以正常受到,但是客户端却收不到服务器送的 result 。
由于初学这个东西,对这里面还不是很清楚,不知道是阻塞I/O的什么问题还是什么原因,到了第五次传送的时候就失败了,也没有抱错
|
你服务端写了密码和读取了认证结果?
AuthResult=auth(UserName,Passwd);/*一个认证函数,返回成功或者1,失败0*/
read(KTS_sock,&AuthResult,4);
欢迎访问我的个人网站 www.linuxc.net
AuthResult=auth(UserName,Passwd);/*一个认证函数,返回成功或者1,失败0*/
read(KTS_sock,&AuthResult,4);
欢迎访问我的个人网站 www.linuxc.net
|
客户端是4个write一个read,而服务端相应应该是4个read和一个write,但是你的服务端2个read,2个write,1个read。应该是读写不匹配造成混乱了吧。
|
if( (write(KTS_sock,&PasswdLen,4)==0) )
break;
if( write(KTS_sock,Passwd,PasswdLen+1)==0)
break ;
应该是
if( (read(KTS_sock,&PasswdLen,4)==0) )
break;
if( read(KTS_sock,Passwd,PasswdLen+1)==0)
break ;
吧?
你的服务器怎么可能写“密码的长度”和“密码”呢
难道是服务器发密码给客户端??
break;
if( write(KTS_sock,Passwd,PasswdLen+1)==0)
break ;
应该是
if( (read(KTS_sock,&PasswdLen,4)==0) )
break;
if( read(KTS_sock,Passwd,PasswdLen+1)==0)
break ;
吧?
你的服务器怎么可能写“密码的长度”和“密码”呢
难道是服务器发密码给客户端??