?
Ich bin geade dabei einen Beispiel Multitasking Chatserver zu erweitern und habe den oben beschriebenen Fehler, komme aber mit den Erklärunge hier nicht weiter.
Ich habe jetzt schon Stundenlang gesucht und nichts anderes zu diesem Thema als diesen Thread gefunden.
Hier der Quelltext:
C_chatserver.cpp
#include "H_C_chatserver.h"
#include <thread>
using namespace std;
int C_chatserver::InitWinSock(){
int Val = 0;
WSAData wsaDATA;
WORD DllVersion = MAKEWORD(2, 1);
Val = WSAStartup(DllVersion, &wsaDATA);
return Val;
}
int C_chatserver::ServerThread(int ID){
char* Buffer = new char[256];
int size = 0;
while (true){
ZeroMemory(Buffer, 512);
if ((size = recv(Connections[ID], Buffer, 256, NULL)) > 0){
for (int a = 0; a < Counter; a++){
if (Connections[a] == Connections[ID]){
cout << Buffer << endl;
}
else{
send(Connections[a], Buffer, 256, NULL);
}
}
}
}
return 10;
}
C_chatserver::C_chatserver(string ip,int port){
system("color 0a");
int Val = InitWinSock();
if (Val != 0){
MessageBoxA(NULL, "WINSOCK STARTUP ERROR!!!", "Error", MB_OK | MB_ICONERROR);
exit(1);
}
Connections = (SOCKET*)calloc(64, sizeof(SOCKET));
sListen = socket(AF_INET, SOCK_STREAM, NULL);
sConnect = socket(AF_INET, SOCK_STREAM, NULL);
addr.sin_addr.s_addr = inet_addr(ip.c_str());
addr.sin_port = htons(port);
addr.sin_family = AF_INET;
bind(sListen, (SOCKADDR*)&addr, sizeof(addr));
listen(sListen, 64);
cout << "Server started" << endl<<"Port: "<<port<<endl<<"IP: " << ip.c_str()<< endl;
while (true){
if (sConnect = accept(sListen, (SOCKADDR*)&addr, &addrlen)){
Connections[Counter] = sConnect;
char *Name = new char[64];
ZeroMemory(Name, 64);
sprintf(Name, "%i", Counter);
send(Connections[Counter], Name, 64, NULL);
send(Connections[Counter], "Welcome", 64, NULL);
cout << "New Connection" << endl;
thread t1(&C_chatserver::ServerThread, Counter);
Counter++;
}
Sleep(50);
}
}
H_C_chatserver.h
#include <WinSock.h>
#include <iostream>
#include <Windows.h>
using namespace std;
#pragma comment (lib, "ws2_32.lib")
class C_chatserver{
public:
C_chatserver(string,int);
private:
SOCKADDR_IN addr;
int addrlen = sizeof(addr);
int Counter;
SOCKET sConnect;
SOCKET sListen;
SOCKET *Connections;
int InitWinSock();
int ServerThread(int ID);
};
Schon im Voraus vielen Dank für eure Hilfe!