5.在chap认证后聊天发现的cin问题

来源:互联网 发布:ae火山视频软件 编辑:程序博客网 时间:2024/04/28 07:19

 

一直弄不明白为什么在本来在客户端要先在cmd下接受数据发到服务器端的,但是每次到了cin.getline()都是直接跳过,但是循环到了第二次就正常了,原因呢?一直糊涂。后来终于看出来了,原来是在最下面那段代码那里,认证过程接收了从窗口输入的密码,而最后还有一个enter,输入之后一直在buffer里存着,等到了cin.getline()则直接给了她。不用我输了。难怪...汗颜了。cin.getline()是从输入流里读取数据的,有就读,以return为结尾吧,还不太确定。稍后查看

Code:
  1. //server   
  2. int chatProgress(SOCKET sock)   
  3. {   
  4.     char recvBuf[128];   
  5.     char sendBuf[128] = "ACK";   
  6.   
  7.     int sendState = 0;   
  8.     while(sendState != SOCKET_ERROR)   
  9.     {   
  10.         recv(sock,recvBuf,sizeof(recvBuf),0);   
  11.         cout<<"from client:/t"<<recvBuf<<endl;   
  12.         cout<<"say something to your client:";   
  13.         cin.getline(sendBuf,sizeof(sendBuf));   
  14.         sendState = send(sock,sendBuf,strlen(sendBuf)+1,0);   
  15.     }   
  16.     return 0;   
  17. }   
  18.   
  19. //client   
  20. int chatting(SOCKET localSock)   
  21. {   
  22.     char sendBuf[128];   
  23.     char recvBuf[128];   
  24.     cout<<endl<<"start a chat!";   
  25.     getchar();   
  26.     do  
  27.     {   
  28.         cout<<"your turn:"<<endl;   
  29.         cin.getline(sendBuf,128);   
  30.         send(localSock,sendBuf,sizeof(sendBuf),0);   
  31.            
  32.         recv(localSock,recvBuf,sizeof(recvBuf),0);   
  33.         cout<<"from server:"<<recvBuf<<endl;   
  34.     }while(strcmp(sendBuf,"exit"));   
  35.     return 0;   
  36. }   
Code:
  1. cout<<"enter the password: ";   
  2. cin>>password;   
  3. cout<<endl;  

 

原创粉丝点击