我想在 控制台 实现一个最简单的聊天室--能够收发消息就行。
一个服务器端,多个客户端。客户端之间的信息由服务器端转发,“广播"给其它所有人。现在,在客户端,我用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...);
    }

解决方案 »

  1.   

    open another thread to execute the function!
      

  2.   

    But how?I need to know more detail.
      

  3.   

    显然在控制台下面不能用阻塞的方式来接收界面输入,可以在循环中扫描键盘信息自己处理。好像用_kbhit。其实这种程序用窗口消息处理更方便。
      

  4.   

    我用一个线程用于接收用户的输入,主线程负责接收信息。解决了 信息的即时输出问题。但是现在有了另外一个问题:
    我在控制台输入一段字符,在按下回车键确定发送之前,对方发过来的信息会直接出现在控制台光标的位置上:
    例如:
    (我的输入:)aaaaaaaa_(光标暂时停留在这里)
    (对方的信息:)aaaaaaaaBBBBBBBB(直接跟在了光标位置之后。)
    有没有什么办法解决呢?