У меня проблема связи с двумя программами на C (как всегда клиент и сервер). Моя проблема в том, когда я хочу использовать определенный IP-адрес (мой IP-адрес), связь между ними не сработала. При этом моя программа работает: addr.sin_addr.s_addr = htonl(INADDR_ANY);
Но в данный момент я меняю эту строку на: addr.sin_addr.s_addr = inet_addr(ip);
У меня проблема связи, поэтому я думаю, что проблема в ip-адресе, который я использую. Я получаю свой Ip-адрес с помощью этой команды: /sbin/ifconfig | grep inet
Так что я не вижу, где моя ошибка. Мой client.c:Connexion с адресом id ip-socket
int client_conversation(int port) {
struct sockaddr_in addr;
int s,c,r;
char tampon[SIZE];
char *ip = "XXX.XXX.X.XX";
struct hostent *nameHost;
nameHost = gethostbyname("localhost");
if(nameHost == NULL) {
fprintf(stderr,"%s: host inconnue\n","localhost");
exit(1);
}
s = socket(PF_INET,SOCK_STREAM,0);
if(s == -1) {
perror("socket: ");
exit(1);
}
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
/**addr.sin_addr.s_addr = htonl(INADDR_ANY);*/
addr.sin_addr.s_addr = inet_addr(ip);
memcpy(&(addr.sin_addr.s_addr),nameHost->h_addr_list[0],nameHost->h_length);
c = connect(s,(struct sockaddr *)&addr,sizeof(struct sockaddr));
if(c == -1) {
fprintf(stderr,"Connexion impossible\n");
exit(1);
}
if((r = read(s,tampon,SIZE)) > 0) {
write(1,tampon,r);
}
close(s);
return 0;
}
Мой server.c:
int serveur_conversation(int port) {
struct sockaddr_in addr;
int s,l,a;
socklen_t m;
char *message = "salut";
char *ip = "XXX.XXX.X.XX";
s = socket(PF_INET,SOCK_STREAM,0);
if(s == -1) {
perror("socket : ");
exit(1);
}
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
/**addr.sin_addr.s_addr = htonl(INADDR_ANY);*/
addr.sin_addr.s_addr = inet_addr(ip);
if(bind(s,(struct sockaddr *)(&addr),sizeof(addr)) == -1) {
perror("bind : ");
close(s);
exit(1);
}
l = listen(s,100);
if(l == -1) {
perror("listen :");
exit(1);
}
do {
a = accept(s,(struct sockaddr *)(&addr),&m);
if(a == -1) {
perror("accept :");
exit(1);
}
int pid = fork();
if(pid == 0) {
if((write(a,message,strlen(message))) == -1) {
printf("Impossible d'envoyer le message\n");
exit(1);
}
exit(1);
}
}while(1);
return 0;
}
Если кто-то видит ошибку, что я не вижу, скажите мне, пожалуйста!
Итак, вопрос становится следующим: с каким IP вы связываетесь? (это 10.x.x.x или 192.168.x.x или еще?) И какова фактическая ошибка? –
Я привязываюсь к этому IP: 192.168.X.XX, и фактическая ошибка: когда я пытаюсь подключить клиента к серверу, у меня есть сообщение об ошибке (я печатаю «Connexion невозможно», когда соединение ... невозможно!) у моего клиента. – afk
Я думаю, что это называется связью. Just sayin ' – typ1232