S
hier ist zwar noch viel müll mit drin was ich noch aufräumen muss, aber im enteffekt läuft es.
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <unistd.h>
#include <syslog.h>
#include <sys/types.h>
#include<netinet/in.h>
#include <string.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<sys/select.h>
#include <time.h>
#define CHILD 0
#define ERROR -1
#define CONFIG_PATH /usr/local/games/servermanager_gameserver/servermanager.conf
#define SERVER_PORT 1500 /* Ein Port der auch von 'gewöhnlichen' Benutzern verwendet werden darf */
#define MSG_SIZE 128 /* Die maximale Anzahl an Zeichen, die 'msg' enhalten darf */
#define MAX_CLIENTS 10
char logpath[200];
struct counterstrike15
{
int Port;
int Map;
int Servername;
};
void OpenConfig()
{
FILE *config;
config = fopen("/usr/local/games/servermanager_gameserver/servermanager.conf","r");
fscanf(config,"#LOGFILE:%s\n",logpath);
fclose(config);
}
void PrintLog(char *Log)
{
FILE *LogFile;
LogFile = fopen(logpath,"a");
time_t zeit;
time(&zeit);
fprintf(LogFile,"%s : %s\n",Log,asctime(localtime(&zeit)));
fclose(LogFile);
}
void start_daemon(char *log_name,int facility)
{
int i;
pid_t pid;
if((pid = fork()) != CHILD) exit(0);
if(setsid() == ERROR)
{
fprintf(stderr,"%s kann nicht Sessionführer werden!",log_name);
exit(0);
}
//chdir("/");
//umask(0);
//for(i=sysconf(_SC_OPEN_MAX);i>0;i--)
//close(i);
//openlog(log_name,LOG_PID,facility);
PrintLog("Daemon gestartet");
}
int main(int argc, char *argv[])
{
printf("Servermanager ist gestartet\n");
OpenConfig();
//start_daemon("ServerManager",0);
PrintLog("Servermanager ist gestartet");
int fromsocket; /* Socket, der auf ankommende Anfragen wartet */
int client; /* Socket für die Kommunikation mit einem Client */
struct sockaddr_in fromaddr; /* Adresse die 'belauscht' werden soll */
char msg[MSG_SIZE]; /* der Buffer für die Nachrichten */
char help[MSG_SIZE] = "Hallo "; /* Hilfsvariable */
int bytes; /* hier wird die Anzahl der gelesenen Bytes gespeichert */
int clients[10];
fd_set fdSet;
/* Socket erzeugen; verbindungsorientiert mit TCP */
fromsocket = socket(PF_INET,SOCK_STREAM,0);
if(fromsocket == -1){
PrintLog("Konnte den Socket nicht erstellen");
}
/* Adresse zum 'Lauschen' definieren */
fromaddr.sin_family = PF_INET;
fromaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* eine Anfrage kann von jeder IPAdresse kommen */
fromaddr.sin_port = htons(SERVER_PORT);
if(bind(fromsocket, (struct sockaddr *)&fromaddr, sizeof(fromaddr)) == -1){
PrintLog("Kann den Socket nicht binden");
}
/* Socket 'horchen' lassen; die maximale Länge der Warteschlange wird auf 3 gesetzt */
if(listen(fromsocket, 3) == -1){
PrintLog("Konnte den Socket nicht listen");
}
char *buffer;
buffer = new char[1024];
int status;
char *ptr;
char *puffer;
int rval;
int b;
int rc;
PrintLog("Servermanager einwandfrei gestartet");
for(b=0;b<10;b++)
{
clients[b]=0;
}
while(1)
{
FD_ZERO(&fdSet);
FD_SET(fromsocket,&fdSet);
for(b=0;b<10;b++)
{
if(clients[b]!=0)
{
FD_SET(clients[b],&fdSet);
}
}
select(11,&fdSet,NULL,NULL,NULL);
if(FD_ISSET(fromsocket,&fdSet))
{
for(b=0;b<10;b++)
{
if(clients[b]==0)
{
clients[b]=accept(fromsocket,NULL,NULL);
printf("Neuer Client verbunden");
break;
}
}
}
for(b=0;b<10;b++)
{
if(clients[b]==0)
{
continue;
}
if(FD_ISSET(clients[b],&fdSet))
{
rc = recv(clients[b],buffer,1024,0);
if(rc==0)
{
printf("Client %d hat die Verbindung beendet\n",b);
close(clients[b]);
clients[b]=0;
}
else
{
ptr=strtok(buffer,"#");
if(strcmp(ptr,"01")==0)
{
printf("CS Server 1.5\n");
ptr = strtok(NULL,"#");
if(strcmp(ptr,"01")==0)
{
printf("HaVoc Server #1\n");
}
else
{
printf("anderer server\n");
}
}
}
}
}
}
}
hoffe du kannst mir nun sagen wo der fehler liegt.