Hallo Leute,
Ich habe einen nervigen Fehler und weiß leider nicht mehr weiter, hat wahrscheinlich garnichts mit Sockets zu tun, aber das weiß ich ja noch nicht
Ich hab mir einen kleinen Chat geschrieben, funktioniert auch alles wunderbar, aber zurzeit können die Clients nur mit dem Server schreiben und nicht untereinander, drum wollt ich das ändern, aber da kommt mein "komischer" Fehler ins Spiel!
Zuerst habe ich die Clients in einem Vector gehabt:
|
C-/C++-Quelltext
|
1
2
|
std::vector<sf::TcpSocket*> vDaten;
std::vector<sf::TcpSocket*>::iterator i;
|
so funktioniert alles wunderbar
Jetz wollt ich das ganze auf eine Klasse verlegen die folgendermaßen aussieht:
Client.h:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#include <SFML/Network.hpp>
#ifndef CLIENT_H
#define CLIENT_H
class Client
{
private:
sf::TcpSocket* Socket;
public:
Client(sf::TcpSocket* TcpSocket);
~Client();
sf::TcpSocket* GetClient();
};
#endif
|
und Client.cpp:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#include <SFML/Network.hpp>
#include "client.h"
Client::Client(sf::TcpSocket* TcpSocket)
{
Socket = TcpSocket;
}
Client::~Client()
{
delete(Socket);
}
sf::TcpSocket* Client::GetClient()
{
return Socket;
}
|
Ich habe in der main bei dem Vector das <sf::TcpSocket*> mit <Client> ersetzt und an der Stelle wo ich das Socket brauche einfach die Funktion GetClient() benutzt. Mit dem Debugger hab ich schon herausgefunden, dass das Problem schon an der Stelle passiert wo ich einen neuverbundenen Client dem Vector hinzufüge:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
if(Selector.IsReady(Listener))
{
//Bereit und eine Verbindung ist da
sf::TcpSocket* Socket = new sf::TcpSocket;
if(Listener.Accept(*Socket) == sf::Socket::Done)
{
//Client zur Liste hinzufügen
vDaten.push_back(Client(Socket)); .....> "Hier sagt dann der Client schon, dass der Server disconnected hat, was nicht stimmt!"
//Client dem Selector hinzufügen
Selector.Add(*Socket); //Derefferenzieren, damit es eine Referenz wird!
Socket->Receive(Buffer, sizeof(Buffer), Received);
std::cout<<"Neuer Client verbunden: "<<Buffer<<" ("<<Socket->GetRemoteAddress()<<")\a"<<std::endl<<std::endl;
//Antwort senden
Message = Buffer;
Socket->Send(Message.c_str(), Message.size() + 1);
}
}
|
Ich hoff ihr könnt mir weiterhelfen,
MfG Geheim!