Publicado: Mie Ago 27, 2008 7:13 pmAsunto: Re: programar un script en perl o c para que escuche un puer
PERL ni idea, te paso un ejemplo de programa cliente y programa servidor escrito en C.
Código:
/* srv.c
*
* Un simple "servidor" que escucha al cliente clnt.c
*
*/
/*
* Estos headers estan en /usr/include
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#define PORT 3389 /* El puerto que sera abierto */
#define BACKLOG 5 /* El maximo numero de conexiones permitidas */
int main(void) {
int fd_srv, fd_clnt; /* los ficheros descriptores */
struct sockaddr_in server; /* para la informacion de la direccion del servidor */
struct sockaddr_in client; /* para la informacion de la direccion del cliente */
int sin_size;
/* A continuacion la llamada a socket()
* AF_INET y SOCK_STREAM estan definidas en bits/socket.h, la cual esta incluida en sys/socket.h
*/
if ((fd_srv=socket(AF_INET, SOCK_STREAM, 0)) == -1 ) {
printf("error en socket()\n");
exit(-1);
}
/* Completamos la estructura server
*/
server.sin_family = AF_INET;
/*
* htons -> Nodo a variable corta de red
* htonl -> Nodo a variable larga de red
* ntohs -> Red a variable corta de nodo
* ntohl -> Red a variable larga de nodo
*/
server.sin_port = htons(PORT);
/*
* INADDR_ANY esta definida en netinet/in.h
* y coloca nuestra direccion IP automaticamente
*/
server.sin_addr.s_addr = INADDR_ANY;
/* Escribimos ceros en el resto de la estructura */
bzero(&(server.sin_zero),8);
/* Terminada la estructura server
*/
/* A continuacion la llamada a bind() */
if(bind(fd_srv, (struct sockaddr*)&server, sizeof(struct sockaddr)) == -1) {
printf("error en bind() \n");
exit(-1);
}
if(listen(fd_srv, BACKLOG) == -1) { /* llamada a listen() */
printf("error en listen()\n");
exit(-1);
}
/* Mostrara la direccion IP del cliente */
printf("Se obtuvo una conexion desde %s\t%d\n", inet_ntoa(client.sin_addr), client.sin_addr);
/* Enviamos el mensaje de bienvenida al cliente */
send(fd_clnt, "Bienvenido a mi servidor.\n", 26, 0);
close(fd_clnt); /* Cierra la conexion con el cliente */
}
}
Código:
/* clnt.c
*
* Este programa se conecta al srv.c
* Debemos pasar como argumento de la linea de comandos la IP donde esta corriendo el srv.c
*
*/
/*
* Estos headers estan en /usr/include
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> /* netbd.h es necesitada por la estructura hostent ;-) */
#define PORT 3550 /* El Puerto Abierto del nodo remoto */
#define MAXDATASIZE 100 /* El numero maximo de datos en bytes que puede recibir este programejo */
int main(int argc, char *argv[]) {
int fd, numbytes;
char buf[MAXDATASIZE]; /* en donde es almacenara el texto recibido */
/*
* hostent esta definida en netdb.h
*/
struct hostent *he; /* estructura que recibira informacion sobre el nodo remoto */
struct sockaddr_in server; /* informacion sobre la direccion del servidor */
if (argc !=2) {
printf("Uso: %s <Direccion IP del servidor de flujos>\n", argv[0]);
exit(-1);
}
No puedes publicar nuevos temas en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en encuestas en este foro