Ahoj,po delsi dobe sem tu s novym problemem. Uz to mam vice mene vyresene ale narazil sem na problem. Server po pripojeni noveho pocitace posle "LOGIN",vyzvu aby se prihlasil. na to mu klient odpovi "LOGINING" a pripravi jmeno a heslo k poslani. Problem je ze misto toho aby se poslalo nejdriv LOGINING a potom teprv jmeno s heslem tak se to posle dohromady. Kod je zde:
okno::okno (QMainWindow* parent):QMainWindow (parent)
{
dialog=new dialogPrihlaseni ();
textEdit=new QTextEdit ();
textBrowser=new QTextBrowser ();
odeslat=new QPushButton ("odeslat");
vertikalniLayout=new QVBoxLayout ();
horizontalniLayout=new QHBoxLayout ();
boxPrihlaseniLidi=new QComboBox ();
horizontalniLayoutWidget=new QWidget ();
vertikalniLayoutWidget=new QWidget ();
msgVysledekPrihlaseni=new QMessageBox ();
prijem=new QTcpServer ();
socket=new QTcpSocket ();
socketOdesilani=new QTcpSocket ();
connect (dialog,SIGNAL (spusteno()),SLOT (zjistiUdaje ()));
nastavLayout ();
setCentralWidget (vertikalniLayoutWidget);
}
void okno::zjistiUdaje ()
{
jmeno=dialog->dejJmeno ();
heslo=dialog->dejHeslo ();
nastavPripojeni ();
}
void okno::nastavPripojeni ()
{
adresa=QHostAddress ("192.168.0.101");
prijem->listen (adresa,25000);
socketOdesilani->connectToHost (adresa,25000);
connect (socketOdesilani,SIGNAL (readyRead()),this,SLOT (startRead()));
}
void okno::startRead ()
{
//QTcpSocket* socket = qobject_cast<QTcpSocket*>(this->sender());
rawdata = socket->readAll();
args = rawdata.split(' ');
command = args.takeFirst();
qDebug() << rawdata;
if (command.compare ("LOGIN"))
{
write ("LOGINING");
prezdivkaPoslani=QString (jmeno);
prezdivkaPoslani.append ("////");
prezdivkaPoslani.append (heslo);
socketOdesilani->write (prezdivkaPoslani.toAscii (),qstrlen (prezdivkaPoslani.toAscii()));
socketOdesilani->flush ();
socketOdesilani->flush ();
}
if (command.compare ("LOGINOK"))
{
uspesnePrihlaseni=true;
msgVysledekPrihlaseni->setText ("Prihlaseni probehlo spravne.");
msgVysledekPrihlaseni->setWindowTitle ("Vitejte");
//dialog->hide ();
}
if (command.compare ("LOGINFALSE"))
{
msgVysledekPrihlaseni->setText ("prihlaseni se nezdarilo.Zadejte spravne jmeno a heslo");
msgVysledekPrihlaseni->setWindowTitle ("chyba!");
uspesnePrihlaseni=false;
}
if (command.compare ("READ"))
{
//precteni zpravy
}
}
void okno::nastavLayout ()
{
horizontalniLayout->addWidget (textEdit);
horizontalniLayout->addWidget (boxPrihlaseniLidi);
horizontalniLayout->addWidget (odeslat);
vertikalniLayout->addWidget (textBrowser);
horizontalniLayoutWidget->setLayout (horizontalniLayout);
vertikalniLayout->addWidget (horizontalniLayoutWidget);
vertikalniLayoutWidget->setLayout (vertikalniLayout);
}
void okno::write (QByteArray data)
{
socketOdesilani->write (data);
socketOdesilani->flush ();
}
neni dodelany ale k popisu problemu staci. Pouzivam flush spravne? myslel sem ze slouzi k okamzitemu zapisu dat. Nejak si s tim nevim rady,server dostane misto "LOGINING" a potom jmena a hesla,tak to vsechno dostane dohromady a takhle by to asi nemelo byt. Mate nejake rady na zlepseni? Dekuju za odpovedi.