我正在創建服務器/ clinet,但我遇到了問題。如果我第一次啓動服務器和客戶端,everthing可以正常工作。然後關閉它們,幾秒鐘後再次啓動它們,並在客戶端收到「連接被拒絕」錯誤。我總是先啓動服務器,然後啓動客戶端。這是代碼。 DoLogin是一個簡單的函數,具有2個讀取和2個寫入。這段代碼有什麼問題?C插座 - 第二次嘗試拒絕連接
server.c
int main(){
int ds_sock;
struct sockaddr_in my_addr;
ds_sock=socket(AF_INET,SOCK_STREAM,0);
memset(&my_addr,0,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(25000);
my_addr.sin_addr.s_addr=INADDR_ANY;
if(bind(ds_sock,(struct sockaddr *)&my_addr,sizeof(my_addr))<0){
printf("Error in bind");
}
listen(ds_sock,2);
int ds_sock_acc;
struct sockaddr_in addr;
size_t sin_size = sizeof(struct sockaddr_in);
if((ds_sock_acc=accept(ds_sock,(struct sockaddr *)&addr,&sin_size))<1){
printf("Error accept");
}
printf("Connected\n");
char *usr = DoLogin(ds_sock_acc);
printf("%s is connected\n",usr);
close(ds_sock_acc);
close(ds_sock);
return 0;
}
client.c
int main(){
int ds_sock;
ds_sock = socket(AF_INET, SOCK_STREAM,0);
int ret;
struct sockaddr_in Eaddr;
Eaddr.sin_family = AF_INET;
Eaddr.sin_port = htons(25000);
Eaddr.sin_addr.s_addr=inet_addr("127.0.0.1");
ret = connect(ds_sock,(struct sockaddr *)&Eaddr,sizeof(Eaddr));
if(ret==-1){
printf("Error connect");
perror("error:");
exit(EXIT_FAILURE);
}
printf("Connect OK\n");
char *usr = DoLogin(ds_sock);
printf("Logged in as %s\n",usr);
close(ds_sock);
return 0;
}
你的錯誤檢查。你看到服務器端的錯誤信息嗎? – 2014-10-10 10:30:47
他_應該在服務器端的'bind()'調用中看到一個錯誤。 – Alnitak 2014-10-10 10:31:08
@alk不是嚴格意義上的重複的恕我直言,因爲OP不知道端口被綁定,而另一個問題是OP知道這一點,但不知道如何解決。 – Alnitak 2014-10-10 11:21:00