dualtcpserver.cpp 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #include "dualtcpserver.h"
  2. DualTcpServer::DualTcpServer(QObject* parent)
  3. : QObject(parent)
  4. {
  5. tcpServer = new QTcpServer(this);
  6. connect(tcpServer, &QTcpServer::newConnection, this, &DualTcpServer::onTcpServerNewConnection);
  7. subTcpServer = new QTcpServer(this);
  8. connect(subTcpServer, &QTcpServer::newConnection, this, &DualTcpServer::onSubTcpServerNewConnection);
  9. }
  10. bool DualTcpServer::startServer(QString ip, int port, int subPort)
  11. {
  12. if (tcpServer->isListening())
  13. {
  14. return false;
  15. }
  16. m_ip = ip;
  17. m_port = port;
  18. m_subPort = subPort;
  19. tcpServer->listen(QHostAddress::Any, m_port);
  20. subTcpServer->listen(QHostAddress::Any, m_subPort);
  21. return true;
  22. }
  23. void DualTcpServer::writeLn(QString s)
  24. {
  25. s = s + "\n";
  26. QString info = QString("共%1个客户端连接").arg(m_clients.count());
  27. emit onWriteLn(nullptr, info);
  28. for (int i = 0; i < m_clients.count(); i++)
  29. {
  30. QTcpSocket* socket = m_clients[i];
  31. QByteArray ba = s.toLocal8Bit();
  32. socket->write(ba);
  33. socket->flush();
  34. emit onWriteLn(socket, s);
  35. }
  36. }
  37. void DualTcpServer::writeUtf16LeLn(QString s)
  38. {
  39. s = s + "\n";
  40. QString info = QString("共%1个客户端连接").arg(m_clients.count());
  41. emit onWriteLn(nullptr, info);
  42. for (int i = 0; i < m_clients.count(); i++)
  43. {
  44. QTcpSocket* socket = m_clients[i];
  45. QTextCodec* code = QTextCodec::codecForName("UTF16-LE");
  46. QByteArray ba = code->fromUnicode(s);
  47. socket->write(ba);
  48. socket->flush();
  49. emit onWriteLn(socket, s);
  50. }
  51. }
  52. void DualTcpServer::onTcpServerNewConnection()
  53. {
  54. QTcpSocket* socket = tcpServer->nextPendingConnection();
  55. connect(socket, &QTcpSocket::readyRead, this, &DualTcpServer::onTcpServerReadyRead);
  56. }
  57. void DualTcpServer::onSubTcpServerNewConnection()
  58. {
  59. QTcpSocket* socket = subTcpServer->nextPendingConnection();
  60. connect(socket, &QTcpSocket::disconnected, this, &DualTcpServer::socketDisconnect);
  61. m_clients << socket;
  62. }
  63. void DualTcpServer::onTcpServerReadyRead()
  64. {
  65. QTcpSocket* socket = static_cast<QTcpSocket*>(sender());
  66. QString msg = QTextCodec::codecForName("gb2312")->toUnicode(socket->readAll()).simplified();
  67. emit onTcpServerExecute(msg);
  68. }
  69. void DualTcpServer::socketDisconnect()
  70. {
  71. QTcpSocket* socket = static_cast<QTcpSocket*>(sender());
  72. m_clients.removeOne(socket);
  73. emit onWriteLn(nullptr, "客户端端口断开");
  74. emit onWriteLn(nullptr, QString("共有%1个客户端").arg(m_clients.count()));
  75. }