QT数据传输的问题

socket_nie 2011-02-16 12:20:43
用Qt写一个数据传输的程序,在客户端,发送程序为
void client::sendData(QString &fileName)
{
int length = fileName.toLatin1().size();
if(write(fileName.toLatin1(),length)!=length) //
{
qDebug<<"Send Data Error";
}
else
qDebug<<"Send Data Successfully";
}

服务器端,接收程序为:
TcpSocket s;
void server::dataReceived()
{
while(s.bytesAvailable() > 0)
{
char buf[1024];
int length=s.bytesAvailable();
s.read(buf,length);
QString fileName=buf;
}
}

这样写,如果client端fileName=“hello”,在server端会不会正确无误的出现fileName=“hello”。
因为是整个程序的一部分,不好单独验证,请教各位高人。。。麻烦大家提点意见。。。有用的意见都会有分的
...全文
201 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yong_f 2011-02-16
  • 打赏
  • 举报
回复
if(write(fileName.toLatin1(),length)!=length)
为什么是fileName.toLatin1(), 这样会不会把编码转换了
谭海燕 2011-02-16
  • 打赏
  • 举报
回复
QByteArray对象创建可以通过QString创建。


LZ要有面向对象的思想。

socket_nie 2011-02-16
  • 打赏
  • 举报
回复
是不是write之前都要把QString转换成QByteArray类型呢,数据长度也必须是根据QByteArrary类型求出?
谭海燕 2011-02-16
  • 打赏
  • 举报
回复
QByteArray里面存放的是最原始的数据,也就是C语言中的char类型的
socket_nie 2011-02-16
  • 打赏
  • 举报
回复
谢谢你的指导,敢问一下,如果按你说的不用与c相关的toLatin1(),该怎么改进呢?
另外,我查了一下函数原型QByteArray QString::toLatin1 (),返回值是QByteArrary类型,是不是
还应该调用data()函数转换成char*,再来进行write
谭海燕 2011-02-16
  • 打赏
  • 举报
回复
Qt的默认字符类型是QChar,是Unicode
C语言中的char类型在Qt中就是LZ说的Latin1

你上面的方法完全可以传输。

TCP建立连接之后,传输Latin1字符或者字符串,用C语言解析出来就不会发生转换。所以没问题。

不过我有个建议。

只要不是与平台相关的东西。
用Qt实现的,最好都用Qt来接收和发送。不要一会儿是C一会儿是Qt.
socket_nie 2011-02-16
  • 打赏
  • 举报
回复
是不是直接写成 if(write(fileName,length)!=length)就可以了?

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧