• 5560阅读
  • 1回复

服务器接收不了客户端的信息啊,急~~~~ [复制链接]

上一主题 下一主题
离线_lei
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-18
首先在服务器我是怎样写的:
  1. 首先有:
  2. QTcpServer *tcpServer;
  3. QTcpSocket *tcpServerConnection;
  4. 在构造函数中:
  5. connect(tcpServer,SIGNAL(newConnection()),this,
  6.   SLOT(acceptConnection()));
  7. //---------acceptConnection()的实现:
  8. void TcpServer::acceptConnection()  //接受连接
  9. {
  10. tcpServerConnection = tcpServer->nextPendingConnection();
  11. connect(tcpServerConnection,SIGNAL(readyRead()),this,
  12.   SLOT(readMessage()));
  13. connect(tcpServerConnection,SIGNAL(error(QAbstractSocket::SocketError)),this,
  14.   SLOT(displayError(QAbstractSocket::SocketError)));
  15. tcpServer->close();
  16. }
  17. void TcpServer::sendMessage()
  18. {
  19. QByteArray block; //用于暂存我们要发送的数据
  20. QDataStream out(&block,QIODevice::WriteOnly);
  21. //使用数据流写入数据
  22. out.setVersion(QDataStream::Qt_4_6);
  23. //设置数据流的版本,客户端和服务器端使用的版本要相同
  24. out<<(quint16) 0;
  25. out<<tr("hello Tcp!!!");
  26. out.device()->seek(0);
  27. out<<(quint16) (block.size() - sizeof(quint16));
  28. QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
  29. //我们获取已经建立的连接的子套接字
  30. connect(clientConnection,SIGNAL(disconnected()),clientConnection,
  31.   SLOT(deleteLater()));
  32. clientConnection->write(block);
  33. clientConnection->disconnectFromHost();
  34. //发送数据成功后,显示提示
  35. ui.statusLabel->setText("send message successful!!!");
  36. }
  37. //这个函数实现了数据的接收,它与服务器端的发送函数相对应。
  38. //首先我们要获取文件的大小信息,然后根据文件的大小来判断是否接收到了完整的文件。
  39. void TcpServer::readMessage()
  40. {
  41. //system("pause");
  42. QDataStream in(tcpServerConnection);
  43. in.setVersion(QDataStream::Qt_4_6);
  44. //设置数据流版本,这里要和服务器端相同
  45. if(blockSize==0) //如果是刚开始接收数据
  46. {
  47.   //判断接收的数据是否有两字节,也就是文件的大小信息
  48.   //如果有则保存到blockSize变量中,没有则返回,继续接收数据
  49.   if(tcpServerConnection->bytesAvailable() < (int)sizeof(quint16)) return;
  50.   in >> blockSize;
  51. }
  52. if(tcpServerConnection->bytesAvailable() < blockSize) return;
  53. //如果没有得到全部的数据,则返回,继续接收数据
  54. in >> message;   //将接收到的数据存放到变量中
  55. ui.messageLabel->setText(message);    //这个label用来显示接收到的数据
  56. }



可是不知道为什么一直连接不上啊~~~~
客户端发送的代码:
  1. 构造函数:
  2. connect(tcpSocket,SIGNAL(connected()),this,SLOT(send()));
  3. void TcpClient::send()   //连接到服务器,执行发送
  4. {
  5. QByteArray block; //用于暂存我们要发送的数据
  6. QDataStream out(&block,QIODevice::WriteOnly);
  7. //使用数据流写入数据
  8. out.setVersion(QDataStream::Qt_4_6);
  9. //设置数据流的版本,客户端和服务器端使用的版本要相同
  10. out<<(quint16) 0;
  11. out<<tr("hello Tcp!!!");
  12. out.device()->seek(0);
  13. out<<(quint16) (block.size() - sizeof(quint16));
  14. }


不知道为什么服务器跟客户端一直连不上
救命啊,各位帮帮忙啊,
代码在这个帖子:http://www.qtcn.org/bbs/read.php?tid=43249
离线uidab

只看该作者 1楼 发表于: 2011-05-18
有时候为了工作直接获得答案,而我却失去了思考的乐趣!


飘啊飘,何时能安居!
快速回复
限100 字节
 
上一个 下一个