Ich hab das mit der Lan verbindung net ganz geschnallt... Ich hab es in einem Spiel benützt, und es hat geklappt. Doch da habe ich nur einzelne chars senden können und müssen.
Ich bin nun mitten drin in der Entwicklung eines Pokerspieles über eine LAN aber ich hab keine Ahnung wie ich grössere Werte als chars senden und lesen kann.
Das hier währe mein h file :
Code: Alles auswählen
#ifndef CGUI_CONNECT_H
#define CGUI_CONNECT_H
#include <QDockWidget>
#include <QtNetwork/QTcpSocket>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QNetworkInterface>
#include <QObject>
#include <CPlayer.h>
namespace Ui {
class CGui_Connect;
}
class CGui_Connect : public QDockWidget
{
Q_OBJECT
public:
explicit CGui_Connect(QWidget *parent = 0);
CPlayer *player;
~CGui_Connect();
private slots:
void on_pushButton_connect_clicked();
void acceptConnection();
void clientConnectionEstablished();
void send(QByteArray tosend);
void on_pushButton_start_clicked();
private:
Ui::CGui_Connect *ui;
QString getMyIP();
void startRead();
QTcpSocket Clientt; // used by tcp client
QTcpServer Server; // used by tcp server
QTcpSocket *pServerClient;
};
#endif // CGUI_CONNECT_HCode: Alles auswählen
#include "CGui_Connect.h"
#include "ui_CGui_Connect.h"
#include "CGui.h"
CGui_Connect::CGui_Connect(QWidget *parent) :
QDockWidget(parent),
ui(new Ui::CGui_Connect)
{
ui->setupUi(this);
ui->pushButton_start->setDisabled(true);
player = new CPlayer;
// -- Server Setup ------------
connect(&Server, SIGNAL(newConnection()), this, SLOT(acceptConnection()));
bool ok = Server.listen();
if (!ok) {
QMessageBox::critical(this,"TCP Server", "Unable to start the server: " + Server.errorString());
close();
return;
}
QString ipAddress = getMyIP();
quint16 port = Server.serverPort();
ui->label_myip->setText(ipAddress);
ui->label_myport->setText(QString::number(port,10));
qDebug()<<"The Server is running on IP: "<<ipAddress<<" Port: "<<port<<" Run a client now." ;
// -- Client Setup ------------
connect(&Clientt, SIGNAL(connected()), this, SLOT(clientConnectionEstablished()));
}
void CGui_Connect::acceptConnection()
{
pServerClient = Server.nextPendingConnection();
connect(pServerClient, SIGNAL(readyRead()),this, SLOT(startRead()));
}
void CGui_Connect::clientConnectionEstablished() {
qDebug()<<"verbindung hergestellt";
}
QString CGui_Connect::getMyIP() {
QString ipAddress;
QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses();
// use the first non-localhost IPv4 address
for (int i = 0; i < ipAddressesList.size(); ++i) {
if (ipAddressesList.at(i) != QHostAddress::LocalHost &&
ipAddressesList.at(i).toIPv4Address()) {
ipAddress = ipAddressesList.at(i).toString();
break;
}
}
// if we did not find one, use IPv4 localhost
if (ipAddress.isEmpty()) {
ipAddress = QHostAddress(QHostAddress::LocalHost).toString();
}
return ipAddress;
}
CGui_Connect::~CGui_Connect()
{
delete ui;
}
void CGui_Connect::on_pushButton_connect_clicked()
{
bool ok;
ui->pushButton_start->setDisabled(false);
ui->pushButton_connect->setDisabled(true);
QString otherIP = ui->lineEdit_enemyip->text();
quint16 otherPort = ui->lineEdit_enemyport->text().toInt(&ok);
//Verbdindung mit der Adresse und port herstellen
QHostAddress addr(otherIP);
Clientt.connectToHost(addr, otherPort);
}
void CGui_Connect::startRead()
{ //wenn weniger als 1 byte warten sonst aus der methode kicken
if (pServerClient->bytesAvailable() < 1)
return;
// anzahl bytes lesen
QByteArray empfangpacket;
empfangpacket = pServerClient->read(pServerClient->bytesAvailable());
//eingelesenes bearbeiten
switch(empfangpacket[0]){
case 's': player->first=false;
break;
case 'g':
break;
default :
break;
}
}
void CGui_Connect::send(QByteArray tosend){
Clientt.write(tosend);
update();
}
void CGui_Connect::on_pushButton_start_clicked()
{
player->first=true;
QByteArray startsend;
startsend[0]='s';
send(startsend);
this->hide();
}
Wie ihr sieht sende ich mit QByteArray die Daten rüber... Aber bei einem Pokerspiel kann ich das so nicht machen... Einer der Spieler muss dem anderen seine Karten senden. Die Spieler müssen gegenseitig senden um wieviel sie erhöhen. ect... Also grössere Werte als ich mit einem Char senden kann.
Danke schon ma im voraus