Matyr
Bekanntes Mitglied
- Dabei seit
- 09.03.2007
- Beiträge
- 428
- Reaktionspunkte
- 0
Hi,
also ich habe mir mal die Arbeit gemacht ein Socket klasse zu erstellen damit man damit leichter arbeiten kann. Leider ist irgendwo ein kleiner Fehler drin, meine ich zumindest, denn wenn ich einen clienten und einen server damit programmiere klapt das senden nicht.
Ps. Auch bitte einmal Bewerten wie die ist, also wie ihr die findet.
Mfg. Matyr
also ich habe mir mal die Arbeit gemacht ein Socket klasse zu erstellen damit man damit leichter arbeiten kann. Leider ist irgendwo ein kleiner Fehler drin, meine ich zumindest, denn wenn ich einen clienten und einen server damit programmiere klapt das senden nicht.
Ps. Auch bitte einmal Bewerten wie die ist, also wie ihr die findet.
Mfg. Matyr
#include <iostream>
#include <winsock2.h>
using namespace std;
class INET
{
private:
long fehler; ///Fehler Behandlung
SOCKET acceptSocket;
SOCKET connectedSocket;
SOCKADDR_IN addr;
bool Schleife; /// Empfangsschleife
public:
void start_winsock()
{
WSADATA wsa;
fehler=WSAStartup(MAKEWORD(2,0),&wsa);
fehler_behandlung("start_winsock");
}
void socket_erstellen()
{
acceptSocket=socket(AF_INET,SOCK_STREAM,0);
fehler_behandlung("socket");
}
void daten_senden(char* Daten)
{
send(connectedSocket,Daten,strlen(Daten),0);
}
void daten_empfangen(char *array)
{
fehler=recv(connectedSocket,array,100,0);
array[fehler]='\0';
fehler_behandlung("empfangen");
}
bool check_schleife()
{
return Schleife;
}
///Server anwendungen
void server_socket_binden(int Port)
{
memset(&addr,0,sizeof(SOCKADDR_IN));
addr.sin_family=AF_INET;
addr.sin_port=htons(Port);
addr.sin_addr.s_addr=ADDR_ANY;
fehler=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN));
fehler_behandlung("s_binden");
}
void server_listen_modus()
{
fehler=listen(acceptSocket,10);
fehler_behandlung("s_listen");
}
void server_connect()
{
connectedSocket=accept(acceptSocket,NULL,NULL);
fehler_behandlung("s_connect");
}
///Client anwendungen
void client_socket_binden(int Port,char* Ip)
{
memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
addr.sin_family=AF_INET;
addr.sin_port=htons(Port); // wir verwenden mal port 12345
addr.sin_addr.s_addr=inet_addr(Ip); // zielrechner ist unser eigener
fehler_behandlung("binden");
}
void client_connect()
{
fehler=connect(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR));
fehler_behandlung("c_connect");
}
void fehler_behandlung(char* name)
{
if(name=="start_winsock")
{
if(fehler!=0)
{
cerr<<"Fehler: start_winsock , fehler code: \n"<<fehler;
}
else
{
cerr<<"Winsock gestartet!\n";
}
}
else if(name=="socket")
{
if(acceptSocket==INVALID_SOCKET)
{
cout<<"Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n"<<WSAGetLastError();
}
else
{
cout<<"Socket erstellt!\n";
}
}
else if(name=="binden")
{
if(fehler==SOCKET_ERROR)
{
cout<<"Fehler: bind, fehler code: %d\n"<<WSAGetLastError();
}
else
{
cout<<"Socket gebunden\n";
}
}
else if(name=="s_listen")
{
if(fehler==SOCKET_ERROR)
{
cout<<"Fehler: listen, fehler code: %d\n"<<WSAGetLastError();
}
else
{
cout<<"acceptSocket ist im listen Modus....\n";
}
}
else if(name=="s_connect")
{
if(connectedSocket==INVALID_SOCKET)
{
cout<<"Fehler: accept, fehler code: %d\n",WSAGetLastError();
}
else
{
cout<<"Neue Verbindung wurde akzeptiert!\n";
}
}
else if(name=="empfangen")
{
if(fehler==0)
{
cout<<"Server hat die Verbindung getrennt..\n";
Schleife=false;
}
if(fehler==SOCKET_ERROR)
{
cout<<"Fehler: recv, fehler code: %d\n"<<WSAGetLastError();
Schleife=false;
}
}
else if(name=="c_connect")
{
if(fehler==SOCKET_ERROR)
{
cout<<"Fehler: connect gescheitert, fehler code: %d\n"<<WSAGetLastError();
}
else
{
cout<<"Verbunden\n";
}
}
}
INET()
{
cout<<"Klasse Socket erstellt";
Schleife=true;
}
~INET()
{
cout<<"Klasse Socket beendet";
closesocket(connectedSocket);
closesocket(acceptSocket);
WSACleanup();
}
};
///////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
INET Server; ///Ein Beispiel wie ich den Server programiert habe
Server.start_winsock();
Server.socket_erstellen();
Server.server_socket_binden(12345);
Server.server_listen_modus();
Server.server_connect();
while(Server.check_schleife())
{
char puffer[100];
Server.daten_empfangen(puffer);
cout<<"Empfangen: "<<puffer;
}
cout<<"ENDE";
}