| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
gancedin
Registrado: 08 Ene 2010 Mensajes: 12
| Publicado: 08/01/2010 4:35 am | | | Título: CLIENTE UDP |
| Hola a todos, Tengo que programar un cliente bajo el protocolo UDP, que se conecte a un servidor de ECHO que ya tengo programado, pero ha de invocarse desde la línea de comandos de la forma siguiente:
$ ./cliente-echo-udp gollum 47893
gollum es el servidor de clase, y 47893 es el puerto que pide el enunciado.
Si alguien puede echarme un cable...
1000 gracias |
| | Volver arriba | |  | Sorancio

Registrado: 29 May 2009 Mensajes: 1157 Ubicación: España
| Publicado: 08/01/2010 5:15 am | | | Título: |
| ¿Y dónde se supone que tienes el problema? ¿Programas en C o C++? Imagino que el problema debe ser recibir los parámetros de inicio del programa, así que... lo primero, la definición de main debe ser la siguiente:
| Código: | int main(int, char **) |
Los parámetros pueden tener el nombre que quieras.
El primer parámetro es un entero que tiene asignado la cantidad de parámetros que ha recibido el programa, siempre es mayor o igual a 1, porque al programa siempre se le pasa cómo parámetro su ruta. El segundo parámetro es una matriz de cadenas de caracteres que tiene el valor de todos los parámetros pasados, la longitud de la matriz es de igual al valor del primer parámetro, y el primer elemento de la matriz es la ruta donde está el programa al ejecutarse. |
| | Volver arriba | |  | gancedin
Registrado: 08 Ene 2010 Mensajes: 12
| Publicado: 08/01/2010 11:31 am | | | Título: |
| Hola de nuevo, quizá expresé incompleto el problema. Tengo que realizar el cliente UDP y para ello se requiere: Para crear el socket, utilizar una función ya presente en el servidor, esa parte ya estaría implementada. A continuación entrar en un bucle que repita lo siguiente: Imprimir en pantalla un “prompt”, por ejemplo “->”, y leer lo que escriba el usuario. Si el texto que se ha leido es "FIN", termina. Si no, envía lo que el usuario ha escrito al servidor, usando la función sendto(). Se necesita proporcionar a esta función una IP y un número de puerto. Usar los de la máquina en la que esté funcionando tu servidor. Esperar a que el servidor te envíe una respuesta, usando la función recvfrom(). Imprimir en pantalla esta respuesta, usando printf(" %s").
grasias |
| | Volver arriba | |  | | Sorancio

Registrado: 29 May 2009 Mensajes: 1157 Ubicación: España
| Publicado: 08/01/2010 12:04 pm | | | Título: |
| Sigo sin saber dónde tienes el problema, sólo me has dicho que ejercicio has de hacer y que tienes implementado, pero no me has dicho que errores da lo que falta.
El bucle no será algo difícil:
| Código: | do { char entrada[81]; printf("$> "); fflush(stdout); if (scanf("%[^\n]", entrada) != 1){ /** hasta el fin de linea **/ continue; } // analizar enviar comando } while(strncmp(entrada, "FIN", 3) != 0); |
|
| | Volver arriba | |  | gancedin
Registrado: 08 Ene 2010 Mensajes: 12
| Publicado: 19/01/2010 4:02 am | | | Título: |
| Hola, esto es lo que tengo hecho hasta ahora:
#include <sys/socket.h> // socket, send, recv. . . #include <netinet/in.h> // sockaddr in, htons, htonl, etc. #include <arpa/inet.h> // inet addr #include <unistd.h> // close #include <stdlib.h> // exit #include <stdio.h> // printf, fprintf. . . #include <errno.h> // errno #include <string.h> #include <sys/types.h>
#define PUERTO 47893 #define TAM_RECIBE 75 #define TAM_ENVIA 75 #define MAX_LINEA 80
int InicializarSocketUDP(int puerto);
void EnviaryRecibir(int socket_udp, char entrada[]);
int main(int argc, char *argv[]) { int socketUDP;
// Informar al usuario del número de puerto que se usará //printf("Servidor UDP: usando el puerto por defecto = % d\n", PUERTO);
if (argc!=2){ printf ("Error: no se ha especificado el numero de puerto ej:./echo-rev 8790\n"); return 0; }
// Eliminar el buffer de printf, para que los printfs tengan efecto // inmediato y sea más fácil depurar el programa // setvbuf(stdout, NULL, _IONBF, 0);
socketUDP=InicializarSocketUDP(PUERTO);
while (1) { char entrada[200]; char *fin="FIN"; printf("-> "); fgets(entrada, 199, stdin); printf("Has escrito: %s\n", entrada);
if (strcmp(entrada,fin)==0) break; else EnviaryRecibir(socketUDP, entrada); } }
int InicializarSocketUDP(int puerto) { int ret; struct sockaddr_in dir; int socket_UDP;
// Crear el socket socket_UDP=socket(PF_INET, SOCK_DGRAM, 0); // DGRAM if (socket_UDP==-1) { perror("Al crear socket"); exit(-1); } // Asignarle el numero de puerto dir.sin_family=AF_INET; dir.sin_port=htons(puerto); dir.sin_addr.s_addr=htonl(INADDR_ANY); //ret=bind(socket_UDP,(struct sockaddr *) &dir, sizeof(dir)); if (ret==-1) { perror("Al asignar direccion"); close(socket_UDP); exit(-1); } // NO SE HACE listen() // El socket ya está preparado para recibir return socket_UDP;
| Código: | [u][b][quote][/quote][/b][/u] |
| Código: | [color=green][/color]
Con esto, me da un fallo de conexión: error 10061
También tengo que añadirle la estructura gethostbyname(), pero por el momento eso no sé como hacerlo |
|
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |