-
UID:115038
-
- 注册时间2011-04-13
- 最后登录2011-07-18
- 在线时间39小时
-
- 发帖24
- 搜Ta的帖子
- 精华0
- 金钱240
- 威望34
- 贡献值0
- 好评度24
-
访问TA的空间加好友用道具
|
首先在服务器我是怎样写的: - 首先有:
- QTcpServer *tcpServer;
- QTcpSocket *tcpServerConnection;
-
- 在构造函数中:
- connect(tcpServer,SIGNAL(newConnection()),this,
- SLOT(acceptConnection()));
-
-
- //---------acceptConnection()的实现:
- void TcpServer::acceptConnection() //接受连接
- {
- tcpServerConnection = tcpServer->nextPendingConnection();
- connect(tcpServerConnection,SIGNAL(readyRead()),this,
- SLOT(readMessage()));
- connect(tcpServerConnection,SIGNAL(error(QAbstractSocket::SocketError)),this,
- SLOT(displayError(QAbstractSocket::SocketError)));
- tcpServer->close();
- }
-
-
- void TcpServer::sendMessage()
- {
- QByteArray block; //用于暂存我们要发送的数据
- QDataStream out(&block,QIODevice::WriteOnly);
- //使用数据流写入数据
- out.setVersion(QDataStream::Qt_4_6);
- //设置数据流的版本,客户端和服务器端使用的版本要相同
- out<<(quint16) 0;
- out<<tr("hello Tcp!!!");
- out.device()->seek(0);
- out<<(quint16) (block.size() - sizeof(quint16));
- QTcpSocket *clientConnection = tcpServer->nextPendingConnection();
- //我们获取已经建立的连接的子套接字
- connect(clientConnection,SIGNAL(disconnected()),clientConnection,
- SLOT(deleteLater()));
- clientConnection->write(block);
- clientConnection->disconnectFromHost();
- //发送数据成功后,显示提示
- ui.statusLabel->setText("send message successful!!!");
- }
-
- //这个函数实现了数据的接收,它与服务器端的发送函数相对应。
- //首先我们要获取文件的大小信息,然后根据文件的大小来判断是否接收到了完整的文件。
- void TcpServer::readMessage()
- {
- //system("pause");
- QDataStream in(tcpServerConnection);
- in.setVersion(QDataStream::Qt_4_6);
- //设置数据流版本,这里要和服务器端相同
- if(blockSize==0) //如果是刚开始接收数据
- {
- //判断接收的数据是否有两字节,也就是文件的大小信息
- //如果有则保存到blockSize变量中,没有则返回,继续接收数据
- if(tcpServerConnection->bytesAvailable() < (int)sizeof(quint16)) return;
- in >> blockSize;
- }
- if(tcpServerConnection->bytesAvailable() < blockSize) return;
- //如果没有得到全部的数据,则返回,继续接收数据
- in >> message; //将接收到的数据存放到变量中
- ui.messageLabel->setText(message); //这个label用来显示接收到的数据
- }
可是不知道为什么一直连接不上啊~~~~ 客户端发送的代码: - 构造函数:
- connect(tcpSocket,SIGNAL(connected()),this,SLOT(send()));
-
-
- void TcpClient::send() //连接到服务器,执行发送
- {
- QByteArray block; //用于暂存我们要发送的数据
- QDataStream out(&block,QIODevice::WriteOnly);
- //使用数据流写入数据
- out.setVersion(QDataStream::Qt_4_6);
- //设置数据流的版本,客户端和服务器端使用的版本要相同
- out<<(quint16) 0;
- out<<tr("hello Tcp!!!");
- out.device()->seek(0);
- out<<(quint16) (block.size() - sizeof(quint16));
- }
不知道为什么服务器跟客户端一直连不上 救命啊,各位帮帮忙啊, 代码在这个帖子: http://www.qtcn.org/bbs/read.php?tid=43249
|