рд╕рд░рд▓ рдХреНрдпреВрдЯреА / рд╕реА ++ рд╕рд░реНрд╡рд░

рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдмрд╣реБрдд рдмрд╛рд░ рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЛрд░реНрдЯ рдХреЛ рд╕реБрдирдирд╛ рд╣реЛрдЧрд╛, рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рднреЗрдЬрдиреА рд╣реЛрдЧреАред рдореИрдВрдиреЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдХреБрдЫ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗ:
- рдПрдХ tcp рд╕рд░реНрд╡рд░ рдмрдирд╛рдирд╛ред
- рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗред
- рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛ (рд╕реЙрдХреЗрдЯ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░рдирд╛)ред
- рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рднреЗрдЬреЗрдВред

рд╕реНрд░реЛрдд: https://github.com/valualit/QTcpServer01

рдЫрд╡рд┐


QtcpServer рдпрд╛ рдЗрдЪреНрдЫрд┐рдд рдкреЛрд░реНрдЯ рдХреЛ рд╕реБрдиреЗрдВ

Server_status рдЪрд░ рдореЗрдВ, рдореИрдВ qtcpServer рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реВрдВ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рджреМрд░рд╛рди рдХреЛрдИ рднреА рдЕрдзрд┐рдХрддрд╛ рди рд╣реЛ (рдпрджрд┐ 0 рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдкреЛрд░реНрдЯ рдХреЛ рдирд╣реАрдВ рд╕реБрдирддрд╛ рд╣реИ, 1 - рдпрд╣ рд╕реБрдирддрд╛ рд╣реИ)ред
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрдХреЗрдд рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдкреЛрд░реНрдЯ рдХреЛ рд╕реБрдирдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рддред рд╡рд░реНрддрдорд╛рди рдореЗрдВ newuser () рд╕реНрд▓реЙрдЯ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕рд░реНрд╡рд░ рдХрд╛ рдирдпрд╛ рдХрдиреЗрдХреНрд╢рди рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
tcpServer = new QTcpServer(this); connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newuser())); if (!tcpServer->listen(QHostAddress::Any, 33333) && server_status==0) { qDebug() << QObject::tr("Unable to start the server: %1.").arg(tcpServer->errorString()); } else { server_status=1; qDebug() << QString::fromUtf8(" !"); } 


рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛

рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдирдпрд╛ рд╕реЙрдХреЗрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдФрд░ рдЗрд╕реЗ рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд╕реБрдиреЗрдВред рд╕рд╛рде рд╣реА рдЗрд╕рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рд╕реЙрдХреЗрдЯ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рд╕реЙрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рдо рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
  if(server_status==1){ qDebug() << QString::fromUtf8("   !"); QTcpSocket* clientSocket=tcpServer->nextPendingConnection(); int idusersocs=clientSocket->socketDescriptor(); SClients[idusersocs]=clientSocket; connect(SClients[idusersocs],SIGNAL(readyRead()),this, SLOT(slotReadClient())); } 


QMap <int, QTcpSocket *> SClients; рдпрд╣ рдорд╛рдирдЪрд┐рддреНрд░ рдирд┐рд░реНрдорд┐рдд рд╕реЙрдХреЗрдЯ рдХреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдореИрдВ рд╕рд░реНрд╡рд░ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЦреБрд▓реА рдХреБрд░реНрд╕рд┐рдпрд╛рдВ тАЛтАЛрдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрджрд┐ рд╡реЗ рдмрдВрдж рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдЧреНрд░рд╛рд╣рдХ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдФрд░ рдХрдиреЗрдХреНрд╢рди рдмрдВрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдиреАрдЪреЗ рд╕рднреА рд╕реЙрдХреЗрдЯреНрд╕ рдХреЛ рдЬрдмрд░рди рдмрдВрдж рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИред
  if(server_status==1){ foreach(int i,SClients.keys()){ QTextStream os(SClients[i]); os.setAutoDetectUnicode(true); os << QDateTime::currentDateTime().toString() << "\n"; SClients[i]->close(); SClients.remove(i); } tcpServer->close(); qDebug() << QString::fromUtf8(" !"); server_status=0; } 


рдПрдХ рдирдпрд╛ рд╕реЙрдХреЗрдЯ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдиреЗ рд╕рдВрднрд╡рддрдГ рдкрд╣рд▓реЗ рд╕реЗ рддреИрдпрд╛рд░ рд░реЗрдб () рд╕рд┐рдЧреНрдирд▓ рдХреЛ рджреЗрдЦрд╛ рдерд╛, рдпрд╣ рддрдм рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдХреБрдЫ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ, рдЗрд╕ рд╕рдордп рд╣рдо рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЬрд╡рд╛рдм рджреЗрдВрдЧреЗред

  //   ,     QTcpSocket* clientSocket = (QTcpSocket*)sender(); //  ,  ,          int idusersocs=clientSocket->socketDescriptor(); //     QTextStream os(clientSocket); os.setAutoDetectUnicode(true); os << "HTTP/1.0 200 Ok\r\n" "Content-Type: text/html; charset=\"utf-8\"\r\n" "\r\n" "<h1>Nothing to see here</h1>\n" << QDateTime::currentDateTime().toString() << "\n"; //       qDebug, //      GET       . qDebug() << clientSocket->readAll()+"\n\r"); //     clientSocket->close(); //      SClients.remove(idusersocs); 


рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдореЗрдВ рдПрдХ рд╕рд░реНрд╡рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП HTTP) рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдкреЛрд░реНрдЯ 33333 рдкрд░ рд╕реБрдирддрд╛ рд╣реИ, рдПрдХ рд╕рд╛рде рдХрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

рдЫрд╡рд┐

PS рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдореИрдВ рд╕реЙрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/In131472/


All Articles