Russian Qt Forum
Ноябрь 24, 2024, 00:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: не понимаю почему выдает ошибку.  (Прочитано 4464 раз)
Firefox
Гость
« : Апрель 23, 2011, 20:48 »

добрый день. с программированием сети столкнулась впервые. решила начать с простого написать сервер и клиент как в книге Шлее.
Код:
// Сервер
#include "myserver.h"

MyServer::MyServer(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
h_addr=new QHostAddress("192.168.13.9");
m_ptcpServer=new QTcpServer(this);
if(m_ptcpServer->listen(*h_addr, 2323));
{
QMessageBox::critical(0,"Server Error","Unable to start the server:"+m_ptcpServer->serverError());
m_ptcpServer->close();
close();
}
connect(m_ptcpServer,SIGNAL(newConnection()),SLOT(slotNewConnection()));
}

MyServer::~MyServer()
{

}
void MyServer::slotNewConnection()
{
QTcpSocket * pClientSocket=m_ptcpServer->nextPendingConnection();
connect(pClientSocket,SIGNAL(disconnected()),SLOT(deleteLater()));
connect(pClientSocket,SIGNAL(readyRead()),SLOT(slotReadClient()));

sendToClient(pClientSocket,"Server Response: Connected!");
}

void MyServer::slotReadClient()
{
QTcpSocket* pClientSocket=(QTcpSocket*)sender();
QDataStream in(pClientSocket);
in.setVersion(QDataStream::Qt_4_3);
for(;;)
{
if(!m_bNextBlockSize)
{
if(pClientSocket->bytesAvailable()< sizeof(qint16)) break;
in>> m_bNextBlockSize;
}
if(pClientSocket->bytesAvailable()< m_bNextBlockSize) break;

QTime time;
QString str;
in>>time>>str;
QString strMessage;
strMessage=time.toString()+" "+"Client has send - "+str;
ui.textEdit->setText(strMessage);
m_bNextBlockSize=0;
}
}
void MyServer::sendToClient(QTcpSocket* pSock, const QString& str)
{
QByteArray arrBlock;
QDataStream out(&arrBlock,QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_3);
out<< qint16(0)<<QTime::currentTime()<<str;

out.device()->seek(0);
out<<qint16(arrBlock.size()-sizeof(qint16));

pSock->write(arrBlock);
}
ошибка возникает при подключении сразу if(m_ptcpServer->listen(*h_addr, 2323));
почему может не подключаться не понимаю, объясните кто-нибудь. айпи адрес и номер порта совпадают.
Код:
//Клиент
#include "myclient.h"

myClient::myClient(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
ui.setupUi(this);
m_pTcpSocket=new QTcpSocket(this);
m_pTcpSocket->connectToHost("192.168.13.12",2323);

connect(m_pTcpSocket,SIGNAL(connected()),SLOT(slotConnected()));
connect(m_pTcpSocket,SIGNAL(readyRead()),SLOT(slotConnected()));
connect(m_pTcpSocket,SIGNAL(error(QAbstractSocket::SocketError)),this,SLOT(slotError(QAbstractSocket::SocketError)));

connect(ui.textEdit,SIGNAL(returnPressed()),this,SLOT(slotSendToServer()));
}

myClient::~myClient()
{

}


void myClient::on_pushButton_clicked()
{
slotSendToServer();
}
void myClient::slotReadyRead()
{
QDataStream in(m_pTcpSocket);
in.setVersion(QDataStream::Qt_4_3);
for(;;)
{
if(!m_nNextBlockSize)
{
if(m_pTcpSocket->bytesAvailable()< sizeof(qint16)) break;
in>> m_nNextBlockSize;
}
if(m_pTcpSocket->bytesAvailable()< m_nNextBlockSize) break;
QTime time;
QString str;
in>>time>>str;
QString strMessage;
strMessage=time.toString()+" "/*+"Server has send - "*/+str;
ui.textEdit->setText(strMessage);
m_nNextBlockSize=0;
}
}
void myClient::slotError(QAbstractSocket::SocketError err)
{
QString strError=
"Error:"+(err==QAbstractSocket::HostNotFoundError?
"The host was not found." :
err==QAbstractSocket::RemoteHostClosedError ?
"The remote host is closed." :
err==QAbstractSocket::ConnectionRefusedError ?
"The connection was refused." :
QString(m_pTcpSocket->errorString())
);
ui.textEdit->setText(strError);
}
void myClient::slotConnected()
{
ui.textEdit->setText("Received the connected() signal");
}
void myClient::slotSendToServer()
{
QByteArray arrBlock;
QDataStream out(&arrBlock,QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_3);
out<< qint16(0)<<QTime::currentTime()<<ui.lineEdit->text();
out.device()->seek(0);
out<<qint16(arrBlock.size()-sizeof(qint16));

m_pTcpSocket->write(arrBlock);
ui.lineEdit->setText("");


}

Записан
blood_shadow
Гость
« Ответ #1 : Апрель 23, 2011, 23:37 »

Код
C++ (Qt)
if(m_ptcpServer->listen(*h_addr, 2323));
{
   QMessageBox::critical(0,"Server Error","Unable to start the server:"+m_ptcpServer->serverError());
   m_ptcpServer->close();
   close();
}

открываем ассистант и читаем:
"bool QTcpServer::listen ( const QHostAddress & address = QHostAddress::Any, quint16 port = 0 )
Tells the server to listen for incoming connections on address address and port port. If port is 0, a port is chosen automatically. If address is QHostAddress::Any, the server will listen on all network interfaces.
Returns true on success; otherwise returns false."

теперь смотрим на самую верхнюю строку в которой ошибка и... надеюсь
все стало понятно?
Записан
Firefox
Гость
« Ответ #2 : Апрель 24, 2011, 00:04 »

мне не надо со всеми связываться я хочу с определенным айпи
Записан
blood_shadow
Гость
« Ответ #3 : Апрель 24, 2011, 00:10 »

мне не надо со всеми связываться я хочу с определенным айпи
причем тут со всеми?
if(m_ptcpServer->listen(*h_addr, 2323)); строка вернет true при успешном подключении,
я так понимаю то опечатка с ";" вконце если да то код:
Код
C++ (Qt)
if(m_ptcpServer->listen(*h_addr, 2323))
{
   QMessageBox::critical(0,"Server Error","Unable to start the server:"+m_ptcpServer->serverError());
   m_ptcpServer->close();
   close();
}
 
выбъет ошибку при успешном подключении, всего то... ибо нет смысла в одном операторе
if(m_ptcpServer->listen(*h_addr, 2323));
Записан
Disaron
Гость
« Ответ #4 : Апрель 24, 2011, 09:09 »

Не только опечатка, там еще надо бы инверсию вкрутить:
Код
C++ (Qt)
if(!m_ptcpServer->listen(*h_addr, 2323))
{
   QMessageBox::critical(0,"Server Error","Unable to start the server:"+m_ptcpServer->serverError());
   m_ptcpServer->close();
   close();
}
Записан
blood_shadow
Гость
« Ответ #5 : Апрель 24, 2011, 14:37 »

Не только опечатка, там еще надо бы инверсию вкрутить:
зачем же так сразу  Улыбающийся, в моих 2 ответах все это указано надо только внимательно
прочесть и мозгами пошевелить, человека надо наталкивать на правильный путь, а не
давать готовое решение  Подмигивающий
Записан
Firefox
Гость
« Ответ #6 : Апрель 25, 2011, 23:24 »

про инверсию не досмотрела совсем)))а про ; это опечатка я убрала сразу потом.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.102 секунд. Запросов: 20.