QT :: waitForBytesWritten()无效

时间:2015-12-13 15:06:50

标签: c++ qt sockets

我是Qt的新手并决定创建聊天程序。每次有人连接时,从服务器端向每个客户端发送字符串add=name以通知新客户端已连接,并且向此连接的客户端发送syn=N这意味着不是N而是每个客户端在此客户端连接之前连接的名称。这是我的代码:

void MainWindow::add_or_delete_from_listview(QString name, User *user, bool ad)
{
  if(ad)
    {
       sync(user);
       name = set_string(name);
       user_buffer << user;
       list << name;
       ui->plainTextEdit->appendPlainText("Name: "+name+" ip:"+user->get_socket()->peerAddress().toString()+" got connected");
       model->setStringList(list);
       send_to_all("add="+name);

    }
    else
    {
       name = set_string(name);
       user_buffer.removeOne(user);
       list.removeOne(name);
       ui->plainTextEdit->appendPlainText("Name: "+name+" ip:"+user->get_socket()->peerAddress().toString()+" got disconnected");
       model->setStringList(list);
       send_to_all("del="+name);
    }

}

void MainWindow::send_to_all(QString text)
{
   int i = 0;
   for(; i<user_buffer.count(); i++)
   {
      qDebug() <<  user_buffer[i]->get_socket()->write(text.toLatin1());
   }
}


void MainWindow::sync(User* user)
{
   QString sync_me ="";

   for(int i = 0; i<user_buffer.count(); i++)
   {
       if(user_buffer[i]->getname() == user->getname())
       {
          continue;
       }

       sync_me+="syn="+user_buffer[i]->getname();
       qDebug() << user->get_socket()->write(sync_me.toLatin1());
       user->get_socket()->waitForBytesWritten(-1);
       sync_me.clear();
   }
}

使用布尔值ad我确定客户端是连接还是断开连接,所以我的问题是,说客户端与名称A连接并且已经在与名称B和C聊天,有时(并非总是)客户端A分别获取字符串syn=Bsyn=C而不是syn=Bsyn=C,这意味着我正在使用函数waitForBytesWritten做错事。我希望你能提供帮助。抱歉,如果我的问题很愚蠢。感谢。

P.S 从客户端我正在使用

QString text = sock->readAll().simplified();
qDebug() << text;

if(text.startsWith("msg="))
{
   emit  action_happened("msg=", text);
}

if(text.startsWith("add="))
{
    emit action_happened("add=", text);
}
if(text.startsWith("syn="))
{
    emit action_happened("syn=", text);
}
if(text.startsWith("del="))
{
    emit action_happened("del=", text);
}

并且在输入的开头我决定如何处理它

0 个答案:

没有答案