2013-03-18 133 views
0

我的服務器不接受客戶端發送的連接請求,客戶端也沒有收到任何連接請求。當客戶端請求它時,服務器關閉。 我的代碼如下: 服務器代碼:當客戶端請求連接時,服務器不接受連接

*#include<sys/socket.h> 
#include<netinet/in.h> 
#include<stdio.h> 
#include<sys/types.h> 
#include<string.h> 
int main() 
{ 
    int sock,bnd,con,lis,size,clilen; 
    char *msg="WELCOME!!!!!"; 
    struct sockaddr_in sockadd,cliadd; 
    //Socket Created..... 
    sock=socket(AF_INET,SOCK_STREAM,0); 
    if(sock!=-1) 
    printf("socket created"); 
    else 
    printf("Not created"); 

     // defining Address of sockets 
    sockadd.sin_family=AF_INET; 
    sockadd.sin_port=htons(5001); 
    sockadd.sin_addr.s_addr=htonl(INADDR_ANY); 
    bnd=bind(sock,(struct sockaddr *) &sockadd,sizeof(sockadd)); 
    if(bnd==-1) 
    printf("NOT BOUND"); 
    else 
    printf("BOUND"); 

    lis=listen(sock,10); 
    if(lis!=-1) 
    printf("listning"); 
    else 
    printf("not listening"); 
    printf("\nWaiting for connection at %s port no %d\n",inet_ntoa(sockadd.sin_addr),ntohs(sockadd.sin_port)); 
    while(1) 
    { 
     clilen=sizeof(cliadd); 
     con=accept(sock,(struct sockaddr *) &cliadd, &clilen); 
     if(con==-1) 
     printf("connected not"); 
     else 
     printf("conneted"); 
     size=send(sock,msg,sizeof(msg),0); 
     if(size==-1) 
     printf("not sent"); 
     else 
     printf("BYTES SENT: %d",size); 
     close(con); 
     sleep(2); 
    } 
    return(0);* 

和客戶端的代碼是:

int sock,bnd,con,lis,size; 
    char msg[35]; 
    struct sockaddr_in sockadd; 
    //Socket Created..... 
    sock=socket(AF_INET,SOCK_STREAM,0); 
    if(sock!=-1) 
    printf("socket created"); 
    else 
    printf("Not created"); 
    //return(0);   
     // defining Address of sockets 
    sockadd.sin_family=AF_INET; 
    sockadd.sin_port=htons(5001); 
    sockadd.sin_addr.s_addr=inet_addr("10.3.5.172"); 
    /*puts(sockadd.sin_family); 
    puts(sockadd.sin_port); 
    puts(sockadd.sin_addr.s_addr);  
    if(inet_pton(AF_INET, argv[1], &sockadd.sin_addr)<=0) 
     { 
     printf("\n inet_pton error occured\n"); 
      return 1; 
     } */ 
    con=connect(sock, (struct sockaddr *)&sockadd, sizeof(sockadd)) ; 
    if(con==-1) 
     { 
     printf("\n Error : Connect Failed \n"); 
      return 1; 
     } 
    else 
    printf("successful"); 
    size=recv(sock,msg,sizeof(msg),0); 
    printf("msg recieved:%s",msg); 
    printf("bytes recieved:%d",size); 
}* 
+0

看起來OK。你能從本地主機連接嗎?你可以做一個'tcpdump'並確定是否有人過濾你? – cnicutar 2013-03-18 09:12:44

+0

服務器執行並等待連接,但是當客戶端執行n個請求時,服務器終止。 – user3032010 2013-03-18 09:24:37

+0

這段代碼亂七八糟 - 在一些地方,儘管有錯誤,它仍然繼續執行。服務器使用錯誤的套接字描述符進行發送。格式化使其難以閱讀... – 2013-03-18 09:50:12

回答

2

您正試圖將服務器套接字上送!

size=send(sock,msg,sizeof(msg),0); // ERROR, this is a server socket! 

嘗試發送新的連接上,而不是:

size=send(con,msg,sizeof(msg),0); 
+1

感謝它在這之後成功地執行了 – user3032010 2013-03-18 10:09:57