请教一个关于socket的小问题

msenb 2005-08-24 09:25:30
这个问题我弄了一天,还是没弄明白

我写一个服务器/客户端 小程序,
功能是: 客户端输入用户名和密码,传送给服务器,服务器经过认证,返回给客户端一个结果值


客户端的一段程序如下:

/*****************/
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 : %d\n",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的什么问题还是什么原因,到了第五次传送的时候就失败了,也没有抱错
...全文
100 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
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 ;
吧?
你的服务器怎么可能写“密码的长度”和“密码”呢
难道是服务器发密码给客户端??
yyy790601 2005-08-24
  • 打赏
  • 举报
回复
客户端是4个write一个read,而服务端相应应该是4个read和一个write,但是你的服务端2个read,2个write,1个read。应该是读写不匹配造成混乱了吧。
msenb 2005-08-24
  • 打赏
  • 举报
回复
我把result用一个字符串代替,向 客户端发送一个“nnnnnn”字符串,结果是这样的:在四次发送中,只有第二次是可以受到数据的,其他都显示受到字符串的长度为 0
sharkhuang 2005-08-24
  • 打赏
  • 举报
回复
没看出来是udp还是tcp
hoyt 2005-08-24
  • 打赏
  • 举报
回复
你服务端写了密码和读取了认证结果?
AuthResult=auth(UserName,Passwd);/*一个认证函数,返回成功或者1,失败0*/
read(KTS_sock,&AuthResult,4);
欢迎访问我的个人网站 www.linuxc.net

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧