suse
22-09-2003, 22:25
Hallo,
komme am besten sofort zu Sache:
Habe mir einen kleinen Server Socket Programmiert. Er läuft auch wunderbar jedoch würde ich gerne folgende Funktion einbauen:
- bei jeder neuen Verbindung sollte sich ein neuer Prozess öffnen
- dieser Prozess sollte dann die Anfrage des Clients bearbeiten und der eigentliche Server sollte also immer noch laufen
- also jede neue Anfrage sollte einen neuen Prozess öffnen
- dies Verbindung sollte offen beleiben
Weiss einer vielleicht von euchen wie ich es am besten hinbekommen könnte!
Hier mein Server Code:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
int server_socket, client_socket;
int laenge, ende, zahl =0;
struct sockaddr_in serverinfo, clientinfo;
char empfangene_zeichen[1000];
char puffer[100]; // Puffer fuer die sprintf() Funktion
char web_seite[] ="HTTP/1.1 200 OK\r\n\r\n\
<html><body><h1><center>Hallo Web-World</center></h1></body></html>";
server_socket = socket(AF_INET, SOCK_STREAM, 0);
serverinfo.sin_family = AF_INET;
serverinfo.sin_addr.s_addr = inet_addr("192.168.123.13");
serverinfo.sin_port = htons(5000);
laenge = sizeof(serverinfo);
while(1) //Start der Endlosschleife
{
zahl++; //Zaehler
bind(server_socket,(struct sockaddr*)&serverinfo, laenge);
listen(server_socket, 3);
//printf("\n Der Server wartet.....\n");
client_socket = accept(server_socket, (struct sockaddr*)&clientinfo, &laenge);
//printf("\nVerbindung mit %s war erfolgreich!\n", inet_ntoa(clientinfo.sin_addr));
sprintf(puffer,"<html><body><center>Du bist mein %d Besucher</center></body></html>",zahl);
//Mit der dieser Funktion gebe ich eine Funktion im Browser aus
read(client_socket, empfangene_zeichen, sizeof(empfangene_zeichen));
write(client_socket, web_seite,sizeof(web_seite));
write(client_socket, puffer,strlen(puffer));
// Der Puffer gibt nur das wieder was drin steht nicht so wie in der sizeof()
// Funktion
close(client_socket);
} // ende der Endlossschleife
close(server_socket);
printf("\nServer beendet");
}
Ich danke schonmal im vorraus!
gruss
suse
komme am besten sofort zu Sache:
Habe mir einen kleinen Server Socket Programmiert. Er läuft auch wunderbar jedoch würde ich gerne folgende Funktion einbauen:
- bei jeder neuen Verbindung sollte sich ein neuer Prozess öffnen
- dieser Prozess sollte dann die Anfrage des Clients bearbeiten und der eigentliche Server sollte also immer noch laufen
- also jede neue Anfrage sollte einen neuen Prozess öffnen
- dies Verbindung sollte offen beleiben
Weiss einer vielleicht von euchen wie ich es am besten hinbekommen könnte!
Hier mein Server Code:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main()
{
int server_socket, client_socket;
int laenge, ende, zahl =0;
struct sockaddr_in serverinfo, clientinfo;
char empfangene_zeichen[1000];
char puffer[100]; // Puffer fuer die sprintf() Funktion
char web_seite[] ="HTTP/1.1 200 OK\r\n\r\n\
<html><body><h1><center>Hallo Web-World</center></h1></body></html>";
server_socket = socket(AF_INET, SOCK_STREAM, 0);
serverinfo.sin_family = AF_INET;
serverinfo.sin_addr.s_addr = inet_addr("192.168.123.13");
serverinfo.sin_port = htons(5000);
laenge = sizeof(serverinfo);
while(1) //Start der Endlosschleife
{
zahl++; //Zaehler
bind(server_socket,(struct sockaddr*)&serverinfo, laenge);
listen(server_socket, 3);
//printf("\n Der Server wartet.....\n");
client_socket = accept(server_socket, (struct sockaddr*)&clientinfo, &laenge);
//printf("\nVerbindung mit %s war erfolgreich!\n", inet_ntoa(clientinfo.sin_addr));
sprintf(puffer,"<html><body><center>Du bist mein %d Besucher</center></body></html>",zahl);
//Mit der dieser Funktion gebe ich eine Funktion im Browser aus
read(client_socket, empfangene_zeichen, sizeof(empfangene_zeichen));
write(client_socket, web_seite,sizeof(web_seite));
write(client_socket, puffer,strlen(puffer));
// Der Puffer gibt nur das wieder was drin steht nicht so wie in der sizeof()
// Funktion
close(client_socket);
} // ende der Endlossschleife
close(server_socket);
printf("\nServer beendet");
}
Ich danke schonmal im vorraus!
gruss
suse