QTcpSocket和linux c服务端交互的问题

ljl0305 2013-08-15 08:43:14
客户端用的QT,采用的是QTcpSocket,服务端是linux 下的c,调用的系统函数,他们之间是不是不能交互呢,还是其他什么问题呢?

首先是连接成功了
m_tcpSocket->connectToHost(QHostAddress(SERVERIP), atoi(SERVERPORT));

然后想给服务端发送数据
int nSendLen = m_tcpSocket->write("hello,world", MAXPACKET);
qDebug()<<nSendLen;
服务端却接收不到,这是什么情况呢?
(服务端可以正常接收linux c的客户端连接)
断开连接却是可以,请大大们指点下
...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
donwmufromdying 2013-08-17
  • 打赏
  • 举报
回复
我们的网络传输都是放在工作线程里的,所以不太会出现你说的在主线程里socket->write 有数据传输的话作为一个任务发给工作线程。这个应该是基本做法。建议看看ACE
donwmufromdying 2013-08-16
  • 打赏
  • 举报
回复
我说嘛。我们有不少应用都是这样的。不过确实有问题,必须保持每次发送和接收的的字节数一致。我们客户端是linux socket,服务端是QTckSocket,然后最开始客户端每包2048,服务端4096,结果传文件总是半路失败,后来两个都定义成2048就OK了
ljl0305 2013-08-16
  • 打赏
  • 举报
回复
引用 2 楼 foxyz 的回复:
我说嘛。我们有不少应用都是这样的。不过确实有问题,必须保持每次发送和接收的的字节数一致。我们客户端是linux socket,服务端是QTckSocket,然后最开始客户端每包2048,服务端4096,结果传文件总是半路失败,后来两个都定义成2048就OK了
那请问下如何解决跨线程问题呢,Thread类继承QThead,m_tcpSocket如果在run中new,那么在主线程使用m_tcpSocket->write就会出现跨线程,如果再构造函数中new,那么在run中接收数据也会出现跨线程,这该怎么解决呢? 看有人说用sendToThread,但是感觉这样不效率,而且还会有问题,不知道有什么好的解决方法没? void Thread::SendMessageSlot(TCommPacket strCommPacket) { qDebug()<<"SendMessageSlot"; // int nSendLen = m_tcpSocket->write((char *)&strCommPacket, MAXPACKET); int nSendLen = m_tcpSocket->write("hello,world", 12); qDebug()<<nSendLen; } void Thread::run() { TChar rPacket; MacServerCommand rCommand; m_tcpSocket = new QTcpSocket(); connect(m_tcpSocket, SIGNAL(readyRead()), this, SLOT(vReadSocketSlot())); connect(m_tcpSocket, SIGNAL(connected()), this, SLOT(vConnectSuccSlot())); 再搞不定就准备用消息队列了...
ljl0305 2013-08-15
  • 打赏
  • 举报
回复
额,找到问题所在了,跨线程问题,哎

16,213

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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