Adresse de la famille non pris en charge par le protocole
Code suivant est un socket de programmation de l'échantillon pour un client TCP.
Mais lorsque je l'exécute, connect() est retourné en tant que famille d'Adresses non pris en charge par le protocole.
J'ai entendu, ce problème se produit si la plate-forme ne prend pas en charge ipv6.
Mais AF_INET, j'ai écrit est ipv4.
Aussi mon serveur, c'est-à CentOS6.4, est configuré dans un inet6 addr .
Personne ne sait pourquoi?
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
int
main(){
struct sockaddr_in server;
int sock;
char buf[32];
int n;
sock = socket(AF_INET,SOCK_STREAM,0);
perror("socket");
server.sin_family = AF_INET;
server.sin_port = htons(12345);
inet_pton(AF_INET,"127.0.0.1",&server,sizeof(server));
connect(sock,(struct sockaddr *)&server,sizeof(server));
perror("connect");
memset(buf,0,sizeof(buf));
n = read(sock,buf,sizeof(buf));
perror("read");
printf("%d,%s\n",n,buf);
close(sock);
return 0;
}
MAIS L'UTILISATION DU SERVEUR IPV4 OU IPV6
OriginalL'auteur user1345414 | 2013-12-04
Vous devez vous connecter pour publier un commentaire.
Le code passe la mauvaise adresse de destination et le nombre incorrect d'arguments à
inet_pton()
. (Pour le dernier, le compilateur doit avoir prévenu de vous parler, btw)Cette ligne
devrait être
Mot à mot de
homme inet_pton
:Pas le problème, mais aussi un problème, c'est que
read()
retournessize_t
pasint
.Les lignes suivantes doivent être ajustés:
pour devenir:
OriginalL'auteur alk
Définir l'adresse du serveur comme ceci;
Je suis sûr que le
Connection refused
signifie que le serveur n'existe pas ou le serveur"Connexion refusée" signifie que l'adresse ip est accessible, mais il n'y a personne à l'écoute sur le port spécifié, alors la machine avec l'adresse ip "refuse" pour vous connecter.
Mon serveur ne fonctionne pas. Je vais demander à un autre thread, afin que ce thread va être hors sujet.
OriginalL'auteur sundq