socket sockaddr_in program por how enviar ejemplos archivos c sockets network-programming

sockaddr_in - Programa de socket en C



server socket c++ (2)

Erm, como mínimo el ''& addr_len'' que pasó en sendto probablemente no debería haber sido pasado por la dirección: es decir, debería haber sido addr_len.

Ok, entonces estoy tratando de que funcione algún código UDP y apenas estoy verde cuando se trata de programación en red usando C. Estoy usando el archivo de muestra de aquí

Básicamente, estoy escuchando paquetes UDP entrantes en un puerto determinado y luego quiero enviar algunos datos de la misma manera. A continuación está la parte relevante.

En este punto, el socket está configurado y vinculado a un puerto de elección y espera los paquetes entrantes:

printf("GSProxy: waiting to recvfrom.../n"); addr_len = (socklen_t) sizeof their_addr; if ((numbytes = recvfrom(sockfd, buf, MAXBUFLEN-1 , 0, (struct sockaddr *)&their_addr, &addr_len)) == -1) { // argument 6 gives a warning but is correct int perror("recvfrom"); exit(1); } printf("GSProxy: got packet from %s/n", inet_ntop(their_addr.ss_family, get_in_addr((struct sockaddr *)&their_addr), s, sizeof s)); printf("GSProxy: packet is %d bytes long/n", numbytes); buf[numbytes] = ''/0''; printf("GSProxy: packet contains /"%s/"/n", buf); char retmsg[] = "Hello!"; if ((numbytes = sendto(sockfd, retmsg, 7, 0, (struct sockaddr *) &their_addr, &addr_len)) == -1) { perror("GSPProxy: sendto"); exit(1); } printf("GSProxy: Sent %i bytes./n", numbytes);

Solo quiero enviar el "¡Hola!" cadena de vuelta al remitente.

Esto falla con el error " GSPProxy: sendto: File name too long ". ¿Cuál es el código de error [ENAMETOOLONG]? Hasta donde puedo decir.

Pero ... ¿qué significa **? ¿Qué archivo? ¿Qué es demasiado largo?

¿Es que no puedo reutilizar el socket para enviar datos, o acabo de cometer otro error newb?

Atentamente,


No debe pasar la dirección de la longitud de la estructura del conector a sendto() ; requiere la longitud real (es decir, "addr_len" , no "&addr_len" ).

La razón por la que pasa la dirección de la longitud a recvfrom() es que la función la cambia si la dirección real es más corta.

En otras palabras, reemplace:

if ((numbytes = sendto (sockfd, retmsg, 7, 0, (struct sockaddr *) &their_addr, &addr_len)) == -1) {

con:

if ((numbytes = sendto (sockfd, retmsg, 7, 0, (struct sockaddr *) &their_addr, addr_len)) == -1) {