C - Ошибка сокета: соединение отказано

Sandu Luca спросил: 13 октября 2017 в 07:31 в: c

Я пытаюсь написать программу на C, я получаю эту ошибку, когда пытаюсь подключиться через порт 9000, например, или через любой другой порт. Это дает мне отказ в соединении, когда я пишу это:

./ клиент hostname-ubuntu 9000

./ клиент 127.0.0.1 9000

./ клиент localhost 9000

- & gt ; Код Server.c:

Что я делаю не так? Где ошибка? Помогите мне, пожалуйста.

#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main(int arg,char*argv[]){
int sd,sd_c,port,r;
struct sockaddr_in my_addr, cli_addr;
socklen_t cli_addr_size;
char buf[100];
if (arg!=2){
        fprintf(stderr, "Use:server-port\n");
        return 1;
    }
memset(&my_addr,0,sizeof(my_addr));
my_addr.sin_family=AF_UNIX;
if(1!=sscanf(argv[1],"%d",&port)){
    fprintf(stderr,"Port number must be a number\n");
    return 1;
    }
my_addr.sin_port=htons(port);
my_addr.sin_addr.s_addr=htonl(INADDR_ANY);sd=socket(PF_UNIX,SOCK_STREAM,0);
if(-1==bind(sd,(struct sockaddr*)&my_addr,sizeof(my_addr))){
    perror("bind()");
        return 1;
    }
listen(sd,1);
cli_addr_size=sizeof(cli_addr);
sd_c=accept(sd,(struct sockaddr*)&cli_addr,&cli_addr_size);
printf("Client connected from %s:%d\n",inet_ntoa(cli_addr.sin_addr),ntohs(cli_addr.sin_port));
close(sd);
while((r=recv(sd_c,buf,100,0))>0){
    write(1,buf,r);
    }
    if(r==-1){
     perror("recv()");
    return 1;
    }
send(sd_c,"xyz",3,0);
close(sd_c);
return 0;
}

- > код Client.c

#include<sys/socket.h>
#include<netinet/in.h>
#include<netdb.h>
#include<stdio.h>
#include<unistd.h>
#include<string.h>
int main(int arg,char*argv[]){
int sd,r,port;
struct hostent *hh;
struct sockaddr_in adr;
char buf[100];
if (arg!=3){
        fprintf(stderr, "Use : client-address-port\n");
        return 1;
    }
memset(&adr,0,sizeof(adr));
adr.sin_family=AF_INET;
if(1!=sscanf(argv[2],"%d",&port)){
    fprintf(stderr,"Port number is not a number\n");
    return 1;
    }
adr.sin_port=htons(port);
hh=gethostbyname(argv[1]);
if(hh==0||hh->h_addrtype!=AF_INET||hh->h_length<=0){
    fprintf(stderr,"Can't find out server address\n");
    return 1;
    }
memcpy(&adr.sin_addr,hh->h_addr_list[0],4);
sd=socket(PF_INET,SOCK_STREAM,0);if(-1==connect(sd,(struct sockaddr*)&adr,sizeof(adr))){
    perror("connect()");
        return 1;
    }
send(sd,"abcd",4,0);
shutdown(sd,SHUT_WR);
while((r=recv(sd,buf,100,0))>0){
    write(1,buf,r);
    }
    if(r==-1){
     perror("recv()");
    return 1;
    }
close(sd);
return 0;
}

0 ответов