- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个客户端程序和一个服务器程序,它们使用 QSslSockets 进行通信。在服务器程序中,如果客户端成功连接,我将发送一个字符串 "Snameadded"
,我还想向它发送服务器上的用户列表,但作为不同的消息,我制作了两个不同的 block 并分别写入它们,但它们被客户端作为一个读取
这是服务器上的代码:
void server::processMess(QString message)
{
//Message type legend
// [number]*** [name]*** [message]
// number = 1, joining server for first time, rest is name
// number = 2, split by "***", retrive name, receiving name, and rest is message
// number = 3, disconnecting from server, resy is name
bool successfullyConnected = false;
QStringList temp = message.split("***");
int num = temp.at(0).toInt();
qDebug() << num;
qDebug() << "size of socket list:" << myClientSockets.size();
QString name = temp.at(1);
if(num == 1)
{
QString name = temp.at(1);
if(clientList.contains(name))
{
QByteArray block;
block.append("Enameinvalid");
QSslSocket *clientConnection = myClientSockets.at(myClientSockets.size() - 1);
myClientSockets.pop_back();
clientConnection->write(block);
\
}
else
{
clientList.append(name);
QByteArray block;
block.append("Snameadded");
successfullyConnected = true;
QSslSocket *clientConnection = myClientSockets.at(myClientSockets.size() - 1);
qDebug() << "Message created to send back to client: " << QString(block);
clientConnection->write(block);
/*
ClientThread *thisClientThread = new ClientThread();
thisClientThread->setClientConnection(clientConnection);
myClientThreads.push_back(thisClientThread);
connect(thisClientThread, SIGNAL(messageReceived(QString)), this, SLOT(processMess(QString)));
thisClientThread->start();*/
}
}
else if(num == 2)
{
//Direct message correctly
QString receiver = temp.at(2);
QSslSocket* receiverConnection = myClientSockets.at(clientList.indexOf(receiver));
QByteArray block;
block.append(message);
receiverConnection->write(block);
}
else if(num == 3)
{
//Disconnect client
updateServer(name + "disconnected");
int position = clientList.indexOf(name);
clientList.removeAt(position);
myClientSockets.removeAt(position);
}
else
{
qDebug() << "Should never reach here";
}
if(successfullyConnected)
{
QByteArray block;
block.append("UsersOnServer:");
for(int i = 0; i < clientList.size(); ++i)
{
block.append(clientList.at(i));
if(i < clientList.size() - 1)
{
block.append("***");
}
}
for(int i = 0; i < myClientSockets.size(); ++i)
{
QSslSocket *receiverConnection = myClientSockets.at(i);
receiverConnection->write(block);
}
}
qDebug() << "Messaged received from client: " + message;
updateServer("Messaged received from client: " + message);
/*QSslSocket* thisConnection = myClientSockets.pop_back();
QByteArray incoming = thisConnection->readAll();
QString message = QString(incoming);
qDebug() << "Message received from client: " + message;
return;*/
/*QByteArray in = tempSocket->readAll();
QString message = QString(in);
qDebug() << "Messaged received from client: " + message;
updateServer(message);
*/
}
这是我客户端的代码:secureSocket->write(block);
if(secureSocket->waitForReadyRead(1000))
{
QByteArray in = secureSocket->readAll();
QString serverMess = QString(in);
if(QString::compare(serverMess, "Snameadded", Qt::CaseSensitive) == 0)
{
returnVal = true;
qDebug() << "added to server";
connect(secureSocket, SIGNAL(readyRead()), this, SLOT(receiveMess()));
}
else if(QString::compare(serverMess, "Enameinvalid", Qt::CaseSensitive) == 0)
{
returnVal = false;
qDebug() << "username already taken";
}
qDebug() << "*************Message from server:************** 1" << serverMess;
}
最佳答案
我修复了它,我只是做了 QSslSocket::waitForBytesWritten() 所以它会发送第一个字节数组,然后分别发送第二个字节数组。
关于c++ - 如何通过 QSslSocket 分别发送两个字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13792833/
在 Windows 7 Ultimate x64 上的 Qt 4.8 中,当我尝试使用 QNetworkAccessManager 通过网络进行 post() 操作时: _net_acc_mgr.po
我正在使用 Qt Creator 4.2.0 运行 Qt 5.7.1(MSVC 2015,32 位)。 QSslSocket 有问题。我收到以下错误: qt.network.ssl: QSslSock
我在 debian wheezy 中使用 Qt 5.4.1 中的 QSslSocket 创建了一个 sslclient 和 sslserver。当我运行程序时,它们根本不工作。调试我的代码后,我看到它
在我的项目中,我需要使用特定版本的 OpenSSL。我同时使用 Qt 4.8.6 和 Qt 5.4.0。我想创建一个自定义 QSslSocket 以传递给 QNetworkAccessManager,
我正在尝试用 Qt 编写一个简单的客户端-服务器应用程序,该应用程序将通过 SSL 进行通信。我尝试使用 QSslSockets,但我一直遇到各种问题。 看看这个: 客户: #define dumpv
我有一个客户端程序和一个服务器程序,它们使用 QSslSockets 进行通信。在服务器程序中,如果客户端成功连接,我将发送一个字符串 "Snameadded",我还想向它发送服务器上的用户列表,但作
这是我编写的同步 TCP 客户端中 read() 语句上方的一小段代码。 std::cout bytesAvailable() waitForReadyRead(); std::cou
我有一个使用QTcpSocket 的客户端-服务器应用程序。现在我想改用加密的 SSL 连接,因此我尝试切换到 QSslSocket。但是我无法与服务器建立连接。这是客户端的代码: Connectio
我正在尝试使用 Qt 文档中的示例代码实现 SSL 服务器。 但是在 serverSocket->startServerEncryption(); 被调用之后,什么也没有发生——无论是 encrypt
是否可以创建一个新的 QSslSocket 并让它获得现有 TCP 连接的所有权,并丢弃旧的 QTcpSocket,而不中断或关闭 TCP 连接? 我需要它在我的 FTP 服务器中实现显式 FTPS,
我使用此代码通过套接字传输大文件内存使用量没有峰值: connect(socket, SIGNAL(bytesWritten(qint64)), this, SLOT(refillSocket
我真的很困惑,希望有人知道我的问题。 我有一个非常简单的 SSL 客户端和服务器。连接很好。沟通很好。当客户端与服务器断开连接时,就会出现问题。这会在服务器上触发一个信号,该信号在 SLOT erro
我对 wkhtmltopdf 有疑问。我在我的 docker 中使用了这样的 wkhtmltopdf。 wkhtmltopdf https://www.google.com google.pdf 然后
我正在编写代理服务器,http 部分已准备就绪,但 https 有问题。我以这种方式创建了一个证书和私钥(据我所知,没有它是行不通的): OpenSSL> req-x509-newkey rsa: 2
我正在尝试通过 SSL 连接到 Twitch 聊天服务器,我基本上复制并粘贴了 QT 中安全 SSL 连接示例中的一些代码。当我可以 connectToHostEncrypted 时,一切都崩溃了。非
我们的业务应用程序基于 Qt 的生产服务器出现问题。当 SSL 连接总数随时间增加时,一些客户端根本无法连接。 QSslSocket::waitForEncrypted() 开始失败,没有 QSslE
需要创建一个使用 SSL 连接到客户端的小型服务器应用程序。一次只能连接一个客户端。 每次客户端尝试建立新连接时,都会调用以下函数: void Control::on_newConnection()
我有一个应用程序作为代理使用 QTcpSocket 拦截 HTTP 请求。我正在尝试将其扩展为也适用于 HTTPS,但它似乎并没有像我预期的那样工作。由于应用程序的独特性,我无法使用 QHttp。 目
我正在 Windows 上开发一个应连接到服务器的应用程序。因此我实现了一个 QSslSocket。 执行连接方法后,sslSocket errorString 发送 The issuer certi
有一个定义 QT_NO_SSL ,如果没有找到 Ssl 库,则定义。还有方法 QSslSocket::supportsSsl() . 但这两者有什么关系,它们是等价的吗?是否QT_NO_SSL QS
我是一名优秀的程序员,十分优秀!