- 论坛徽章:
- 0
|
程序是个客户端程序,用来与聊天室服务器端通信,客户端从终端读消息,然后发过去,服务器发回处理完的消息,客户端读取处理后的消息然后显示在屏幕上。
采用的是单进程select模型,select的readset来自stdin和sockfd(与server端建立连接的套接口)。sockfd是用fdopen打开然后用
fgets函数读取的。
程序结构如下:
- fdin = fdopen(sockfd,"r");
- for(; ;)
- {
- FD_SET(0,&rset);
- FD_SET(sockfd,&rset);
- select(maxfd,&rset,NULL,NULL,NULL);
- if(FD_ISSET(sockfd, &rset))
- {
- while( fgets(recvline, MAXLINE, fdin) != NULL)
- {
- fprintf(stderr,"%s",recvline);//有几行打印不出来,难道阻塞在前面的select里了?
- ....
- break;//一次读取一行,处理一行,然后跳出while循环。
- }
- }
- if(FD_ISSET(0, &rset))
- {
- if( fgets(sendline,MAXLINE,stdin) == NULL)
- {
- fprintf(stderr,"Quit by user!\n");
- exit(0);
- }
- write(sockfd, sendline, strlen(sendline));
- }
- }
复制代码
问题是每次我只能读取到server端发送过来的一部分消息,比如说server端发过来一条消息有5行,我这只能读到3行。另外两行
要我客户端再发一条消息过去才能显示出来。而对客户端第二次发过去的消息的回应的读取也存在这个问题。
小弟我找不到问题所在,请有经验的大虾指点一下,拜谢!!!  |
|