QT中socket通信中文乱码问题(get√)

在使用Qt 5.2版本的TCP socket进行通信时,遇到中文乱码问题。原来代码中涉及编码的部分由于过时而无法通过编译。在删除这些代码并成功编译运行后,发现发送和接收的数据均出现乱码。通过研究,找到了解决方案。发送时主要使用了`fromLocal8Bit`和`toLocal8Bit`方法来处理中文字符的编码和解码。

Qt version:5.2

download了一份4.8的代码下来研究这个tcp通信。

结果挺萌的,QTextCodec中各种方法过时和被抛弃;

编译都通不过。

将有关编码的代码全部删除后,通过了 并且能够运行。但是。。

挺萌的,乱码。发送和接受都乱码。

研究找到解决方法如下。

参考两段代码,发送和接受的:

发送:

void TcpS::btn_send()
{
 
 
     QByteArray datasend = ui->textEdit->toPlainText().toLocal8Bit();
     m_tcpsocket->
### 关于QtQTcpSocket库的使用方法及常见问题 #### QTcpSocket简介 QTcpSocket 是用于实现 TCP 协议通信的一个类,适用于构建可靠的客户端应用程序。该类继承自 QIODevice 并提供了读写数据的功能以及连接状态的变化通知机制[^1]。 #### 创建并配置QTcpSocket对象 为了创建一个 `QTcpSocket` 对象,在构造函数中可以传递父指针参数来管理内存生命周期;通常情况下不需要显式调用 delete 来销毁它因为有 Qt 的父子关系自动处理这一点。下面是一个简单的实例化方式: ```cpp QTcpSocket* tcpSocket = new QTcpSocket(this); ``` #### 连接到服务器 通过设置远程主机地址和端口号来进行连接操作。这里展示了一个同步等待直到建立成功或者超时失败的例子: ```cpp tcpSocket->connectToHost("example.com", 80); // 非阻塞模式尝试连接到指定的服务端口 if (!tcpSocket->waitForConnected(5000)) { // 如果五秒内未能完成则认为失败 qDebug() << "Connection failed!"; } ``` #### 发送与接收消息 一旦建立了有效的连接就可以利用 write 和 readAll 方法交换信息了。write 函数负责向对方发送字符串形式的数据包而 readAll 则用来获取所有可用输入流中的内容。 ```cpp // 向服务端发送请求 tcpSocket->write("GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"); // 接收响应头直至遇到空白行表示结束 QByteArray responseHeader; while (true) { QByteArray line = tcpSocket->readLine(); if (line == "\r\n") break; // 结束标志 responseHeader.append(line); } qDebug().noquote() << QString(responseHeader); // 获取剩余部分即网页主体 QByteArray responseBody = tcpSocket->readAll(); qDebug().noquote() << QString(responseBody); ``` #### 断开连接 当不再需要保持会话的时候应当主动关闭套接字以释放资源。 ```cpp tcpSocket->disconnectFromHost(); // 开始断连过程但仍维持现有缓冲区内的未决传输任务 tcpSocket->close(); // 彻底终止一切活动立即停止任何进一步的操作 ``` #### 常见错误及其解决方案 - **无法建立连接**:确认目标机器可达性和防火墙策略允许访问特定端口。 - **乱码现象**:确保双方采用一致编码格式如 UTF-8 或 ASCII 编码。 - **性能瓶颈**:优化 I/O 处理逻辑减少不必要的上下文切换提高吞吐量效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值