我想在 控制台 实现一个最简单的聊天室--能够收发消息就行。
一个服务器端,多个客户端。客户端之间的信息由服务器端转发,“广播"给其它所有人。现在,在客户端,我用select()判断与服务器连接的socket 是否可读,如果是,就puts()接收到的内容。
问题是:我的程序会阻塞在用户输入(我用gets()函数),如何能够实现服务器传过来的内容即时显示在控制台呢?
程序大概如下:
...
... fd_set rset;
FD_ZERO(&rset);
FD_SET(sock,&rset);//sock 是与服务器通信的套接字。
while(1)
{
select(sock+1,&rset,NULL,NULL,NULL);
if(FD_ISSET(sock,&rset))
{
recv()
.......//处理输出
}
gets(buf);//////////////程序阻塞在这里,怎么办 send(buf...);
}
一个服务器端,多个客户端。客户端之间的信息由服务器端转发,“广播"给其它所有人。现在,在客户端,我用select()判断与服务器连接的socket 是否可读,如果是,就puts()接收到的内容。
问题是:我的程序会阻塞在用户输入(我用gets()函数),如何能够实现服务器传过来的内容即时显示在控制台呢?
程序大概如下:
...
... fd_set rset;
FD_ZERO(&rset);
FD_SET(sock,&rset);//sock 是与服务器通信的套接字。
while(1)
{
select(sock+1,&rset,NULL,NULL,NULL);
if(FD_ISSET(sock,&rset))
{
recv()
.......//处理输出
}
gets(buf);//////////////程序阻塞在这里,怎么办 send(buf...);
}
我在控制台输入一段字符,在按下回车键确定发送之前,对方发过来的信息会直接出现在控制台光标的位置上:
例如:
(我的输入:)aaaaaaaa_(光标暂时停留在这里)
(对方的信息:)aaaaaaaaBBBBBBBB(直接跟在了光标位置之后。)
有没有什么办法解决呢?