LINUX网络编程TCP服务器 客户端 有乱码怎么解决?

LINUX网络编程TCP服务器 客户端 有乱码怎么解决?,第1张

解决办法:

1.在客户端n=read(socketfd,buff,1023)代码之前加上memset(buff,0,sizeof(buff)),这是保证收到较短数据(使用TCP你不能保证每次接收的数据和发送的数据时等长的),打印也是正确的;

2.将客户端buff[n+1]+='\0'修改为buff[n]='\0',这是因为n是下标,已经是最后一个位置了;

3.将服务器端buff[n+1]+='\0'修改为buff[n]='\0',这是因为n是下标,已经是最后一个位置了,而且和第2)一样,那个加号也要去掉,应该是笔误吧;

4.最大的问题,将服务器端write(connectfd,buff,1023),你怎么能够保证收到1023个字符呢?也应该将while中条件移出作为WHILE中的一条语句,而且加上前面所述的memset语句,而将这里的write(connectfd,buff,1023)修改为write(connectfd,buff,strlen(buff))。

祝共同进步!

作为一个合格的程序员,在程序内部进行字符串传输和处理时,都必须使用 utf8 编码,只有在进行对外输出存储和显示的时候,才转换成 locale 编码。从外部读取字符串,也要先转换成 utf8 后在进行程序内处理。另外应用程序内部不应该嵌入编码字符串,应该只存在英文字符串,所有 CJK 字符串,都应该从外部专门读取,读取后或者生成外部字符串数据文件时,必须确定编码。

Windows 其实也是如此,不过 Windows 的输入输出是自动进行转换的,内部处理编码是 UCS 的某个吧?

用Qt编写的窗口与Unity3D通过Tcp进行通信,通信过程中难免发送一些中文字符,下面简单介绍一下: Qt版本:5.9.9 , 建立TcpServer unity3D 建立TcpSocket  , 通过固定端口进行通信 Qt与Unity3D通信发生中文乱码问题,主要在以下方面: 1. 在Qt main.cpp 中添加以下设置 QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK")) GBK要与Unity3D中的保持一致,GB2312也是可以的,UTF-8不可以。 2. Qt发送数据 mCommondSocket->write(command.toLocal8Bit()) 发送的字符串直接转化为QByteArray发送,转化为char*发送,是会乱码的。 3.示例截图 通过Qt发送一个视频地址,在Unity3D上进行视频播放,也会打印出接收的数据。videoPath代表视频地址:前面的BG代表标识;MuTcpSocketObject是tcp通信.好了,都已经介绍完毕,希望能帮到大家。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7545691.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存