socket中文乱码怎么解决呢?不知道的小伙伴来看看小编今天的分享吧!
socket服务端和客户端编码方式不一致将有可出现中文乱码问题,因此两边设成一样即可。
socket服务端发送数据时设置编码方式:
PrintWriter output = new PrintWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8"),true);
output.println("你好");
客户端接收数据时设置编码方式:
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
System.out.println(input.readLine());
拓展资料:
socket是什么?
所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一
端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过
网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
套接字是通信的基石,是支持TCP/IP协议的路通信的基本操作单元。可以将套接字看作不同主机间的进程进行双间通信的端点,它构
成了单个主机内及整个网络间的编程界面。套接字存在于通信域中,通信域是为了处理一般的线程通过套接字通信而引进的一种抽象
概念。套接字通常和同一个域中的套接字交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序),各种进程使用
这个相同的域互相之间用Internet协议簇来进行通信。
Socket(套接字)可以看成是两个网络应用程序进行通信时,各自通信连接中的端点,这是一个逻辑上的概念。它是网络环境中进程间
通信的API(应用程序编程接口),也是可以被命名和寻址的通信端点,使用中的每一个套接字都有其类型和一个与之相连进程。通信时
其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信
息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的
机制。
以上就是小编今天的分享了,希望可以帮助到大家。
C/C 之QT攻略——在QT中容易遇到的那些坑,千万别踩了
(1)QUdpsocket接收数据
进入槽后,要用这种方式读取,否则可能会导致不发readyRead()信号 。
while(udpSocket->bytesAvailable())
{
udpSocket->readDatagram(ch,size);
}
(2)QtcpSocket删除
一定要用deleteLater
一定要用deleteLater
一定要用deleteLater
否则会导致用户对象溢出
(3)运行文件附带调试输出窗口
CONFIG = console pro
配合->http://github.com/851896022/QLog
(4)可以在pro文件中写上标记版本号 ico图标
VERSION = 2019.08.08
RC_ICONS = main.ico
(5)解决socket传输后等中文乱码
转成base64传输
QByteArray(QString.toStdString().data()).toBase64()
(6)QT连接MySql后,长时间无操作(默认8小时)会断开。
isOpen()等函数无法判断,需执行sql语句才能发现失败
QSqlDatabase.setconnectOptions("MYSQL_OPT_RECONNECT=1");
↑断开后可自动重连
(7)在槽使用sender()函数可获取到发出信号的对象的指针。
(8)子线程中使用QAxWidget不成功,原因是在QApplication的主线程中,会自动初始化COM库,而新开辟的子线程不会自动初始化COM库,所以需要我们手动来初始化。
//添加头文件
#include
//在线程开始的时候初始化COM库:
HRESULT r = OleInitialize(0);
if (r != S_OK && r != S_FALSE)
{
qWarning("Qt:初始化Ole失败(error %x)",(unsigned int)r);
}
使用结束后需要释放掉:
OleUninitialize();
(9)file.write()以后调用file.flush()避免数据在缓存中未成功写入。
(10)延时。
{
QEventLoop loop;
QTimer t;
connect(&t,SIGNAL(timeout()),&loop,SLOT(quit()));
t.start(1000);
loop.exec();
}
(11)别用QWidget布局,别问我怎么知道的。
(12) 对QLCDNumber控件设置样式,需要将QLCDNumber的segmentstyle设置为flat。
(13)QTimer::singleShot 计时器单次触发,有时会有意想不到的效果
(14)QByteArray 有toHex 有fromHex 有toBase64有fromBase64
希望对你有帮助~
所以说,想要在程序员生涯内有更高的成就的话,最最重要的是尽可能的提升自己的编程能力,并且,与其想着怎么去提升,不如从现在开始动手动脑,如果对于C/C 感兴趣的话,可以关注 私信小编【C/C 编程】有一些视频希望可以帮助到你,学习不怕从零开始,就怕从不开始。