Hab n'paar Probleme mit meiner Client-Server Anwendung. Der Client stellt eine Verbindung zum Server her. Aber er empfängt keine Daten. Nun weiß ich allerdings nicht ob das an meiner Empfangs- oder Senderoutine liegt!?
Kann mir einer helfen hier mal meine Code
Client (TCPComm.h):
Code: Alles auswählen
#ifndef _TCPCOMM_H__
#define _TCPCOMM_H__
#include <QTcpSocket>
#include <QIODevice>
class TCPComm : public QObject
{
Q_OBJECT
public:
TCPComm();
virtual ~TCPComm();
void connectToHost( void );
void writeByte ( QByteArray bytes );
protected:
QTcpSocket *_psock;
};
class SendData
{
public:
void sendDataTCP ( void );
};
#endif
TCPComm.cpp
Code: Alles auswählen
#include "TCPComm.h"
#include <iostream>
TCPComm::TCPComm()
{
}
TCPComm::~TCPComm()
{
}
void TCPComm::connectToHost( void )
{
QString ip("127.0.0.1");
std::cout << "TCP Connect" << std::endl;
_psock = new QTcpSocket();
_psock->disconnectFromHost();
_psock->connectToHost(ip,7,QIODevice::ReadWrite);
}
void TCPComm::writeByte(QByteArray bytes)
{
if(!_psock)
return;
_psock->write(bytes);
std::cout << "Bytes Groesse:" << bytes.length() << std::endl;
// std::cout << _psock->peerAddress << std::endl;
for (int i = 0; i < bytes.length(); i++)
{
std::cout << QString::number(bytes.at(i)).toStdString() << std::endl;
}
}
int main(int argc, char* argv[])
{
SendData *m_send = new SendData;
m_send->sendDataTCP();
return 0;
}
void SendData::sendDataTCP()
{
QByteArray byte;
byte.clear();
int b;
b = 1;
byte.append(b);
b = 2;
byte.append(b);
b = 3;
byte.append(b);
b = 4;
byte.append(b);
TCPComm *m_tcp;
m_tcp = new TCPComm();
m_tcp->connectToHost();
m_tcp->writeByte(byte);
}
Code: Alles auswählen
#ifndef _TCPSERVER_H__
#define _TCPSERVER_H__
#include <QApplication>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
#include <iostream>
class TCPServer : public QObject
{
Q_OBJECT
public:
TCPServer()
{
}
void listenData ( void );
QTcpServer *m_server;
QTcpSocket *m_socket;
QTcpSocket *_psock;
protected:
protected slots:
void slotrec ( void );
void readFromClient( void );
};
#endif
Code: Alles auswählen
#include "TCPServer.h"
#include <iostream>
/////////////////////////////////////////////////////////////////////////////////////////
void TCPServer::listenData()
{
QString ip = "127.0.0.1";
m_server = new QTcpServer();
m_socket = 0;
// connect(&_server,SIGNAL(newConnection()),this,SLOT(slotNewConnection()));
m_server->listen(QHostAddress::Any, 7);//QHostAddress::Any,6666);
if (!m_server->isListening())
std::cout << "Server im Arsch" << std::endl;
else
{
std::cout << "Laeuft ne!!!" << std::endl;
std::cout << m_server->serverPort() << std::endl;
// slotsend();
connect(m_server,SIGNAL(newConnection()),this,SLOT(slotrec()));
}
}
/////////////////////////////////////////////////////////////////////////////////////////
void TCPServer::readFromClient( void )
{
std::cout << "ReadFromClient" << std::endl;
if (m_socket->canReadLine())
{
_psock = m_socket;
QByteArray bytes = m_socket->readAll();
for (int i = 0; i < bytes.length(); i++)
{
std::cout << QString(bytes.at(i)).toStdString() << std::endl;
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////
void TCPServer::slotrec( void )
{
QByteArray bytes;
bytes.clear();
std::cout << "Verbindung steht" << std::endl;
if (m_socket == 0)
{
m_socket = m_server->nextPendingConnection();
std::cout << "PeerPort:" << m_socket->peerPort() << std::endl;
// m_socket->waitForReadyRead(-1 );
connect(m_socket, SIGNAL(readyRead()),this, SLOT(readFromClient()));
}
m_socket = 0;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
TCPServer *server;
server = new TCPServer();
server->listenData();
return app.exec();
}
Beste Grüsse
gyros