Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* A simple server in the internet domain using TCP The port number is passed as an argument This version runs forever, forking off a separate process for each connection gcc server2.c -lsocket */
- #include <iostream>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- void callback(int);
- int main(int argc, char *argv[]) {
- int handlerSocket = 0;
- int newHandlerSocket = 0;
- int puerto = 0;
- int TamIP_Cliente = 0;
- int procesoHijo = 0;
- int MAX_QUEUE = 5;
- int ARGUMENTOS_MIN = 2;
- int ERROR = -1;
- struct sockaddr_in IP_Servidor, IP_Cliente;
- /* Numero máximo de conexiones en la cola. */
- if (argc < ARGUMENTOS_MIN) {
- cout << "Puerto de escucha no especificado.\nAñade el puerto de escucha como parámetro en la llamada. Ejemplo:\n./server 127.0.0.1 8080";
- exit(1);
- }
- handlerSocket = socket(AF_INET, SOCK_STREAM, 0);
- if (handlerSocket == ERROR) {
- cout << "No se pudo crear el socket.";
- exit(1);
- }
- /* Formatea el buffer */
- bzero((char *) &IP_Servidor, sizeof(IP_Servidor));
- /* Obtiene el argumento por cli */
- puerto = atoi(argv[1]);
- /* socket IPV4 */
- IP_Servidor.sin_family = AF_INET;
- /* Enlaza a cualquier dirección local disponible */
- IP_Servidor.sin_addr.s_addr = INADDR_ANY;
- /* Fuerza que se utilice el orden correcto en la dirección de memoría */
- IP_Servidor.sin_port = htons(puerto);
- if (bind(handlerSocket, (struct sockaddr *) &IP_Servidor, sizeof(IP_Servidor)) == ERROR) {
- cout << "Error enlazando el servidor";
- exit(1);
- }
- listen(handlerSocket, MAX_QUEUE);
- TamIP_Cliente = sizeof(IP_Cliente);
- while (1) {
- newHandlerSocket = accept(handlerSocket, (struct sockaddr *) &IP_Cliente, &TamIP_Cliente);
- if (handlerSocket == ERROR) {
- cout << "Error creando nuevo socket";
- exit(1);
- }
- procesoHijo = fork();
- if (procesoHijo == ERROR) {
- cout << "Error duplicando proceso.";
- exit(1);
- }
- if (procesoHijo != ERROR) {
- close(handlerSocket);
- callback(newHandlerSocket);
- exit(0);
- } else {
- close(newHandlerSocket);
- }
- }
- return 0;
- void callback (int sock) {
- int n;
- char buffer[256];
- bzero(buffer,256);
- n = read(sock,buffer,255);
- if (n < ERROR) {
- cout << "El handler del socket contiene errores";
- exit(1);
- }
- cout << "Respuesta:" << endl << buffer;
- n = write(sock,"Datos recividos",18);
- if (n < ERROR) {
- cout << "No se pudo escribir en el socket.";
- exit(1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement