0
Cでプログラムを作成しようとしていますが、ポート9000などの他のポート経由で接続しようとするとこのエラーが発生します。私が間違っているのをいただきましc - ソケットエラー:接続が拒否されました
: - >Server.cコード
./client hostname-ubuntu 9000
./client 127.0.0.1 9000
./client localhost 9000
を: それは私がこれを書いたときに、接続が拒否した私に与えますか?間違いはどこですか?お願い助けて。
#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をコードあなたはあなたのプログラムに2つの異なるプロトコルを使用している
#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;
}
私の最初の推測では、1024以上のポートのためにsudo ./client 127.0.0.1 9000 –
須藤を用いることであろうことができます必要はありません...サーバーは何を言っていますか、それは接続を受け入れますか?また、サーバーは、最初のクライアントが切断した後に終了するようだ... –
コマンドsudoは私にパスワードを要求していますが、キーボードは "Enter"ボタン以外では機能していません。もう一度私は何が間違っているのか分からない。 –