- 论坛徽章:
- 0
|
原帖由 scalps 于 2003-10-31 21:12 发表
小弟刚开始学习socket,想请教一个问题,怎么判断在一个recv中是否已经接收完成服务器的信息了,我这样试了一下,但是不行, 接收到一些乱字码,请问怎么有效的进行接收。
send(.......);
char buf ...
楼主的这段代码蛮有意思的,unix网络编程上说的很清楚,recv函数读到的数据不一定是你想得到的,比如说你在客户端送了一个字符串有300个字节,但是它一次可能只接收200个,recv返回就是200,然后再去读一次可能读到100, 但是一般来说一次就能直接收到的,(不排除我上述说的情况),如果真的是我上述说的情况你这样的判断也是不对的,因为sizeof(buf)=256,如果你再客户端送过来的数据<256或者刚好=256而分好几次接收都不可能正常的接收的,unp上使用的是while(n=recv(sockfd,buf,bufsize,0)>0)而这样却又很容易导致堵塞在那里而出不来,我建议就一条recv()就行了(当然有出错控制)
去看看unix network program吧,那本书很好的  |
|