2013-03-18 2 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

확인을 보인다. localhost에서 연결할 수 있습니까? 'tcpdump'를하고 누군가가 여러분을 걸러 내는지 알아낼 수 있습니까? – cnicutar

+0

서버가 실행되고 연결을 기다리지 만 클라이언트가 n 요청을 실행하면 서버가 종료됩니다. – user3032010

+0

이 코드는 엉망입니다 - 오류가 있더라도 실행을 계속하는 곳이 있습니다. 서버가 잘못된 소켓 설명자를 사용하여 전송합니다. 서식을 지정하면 읽기가 어려워집니다. –

답변

2

당신은 서버 소켓에 보내려고!

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

대신 새 연결에 보내십시오 :

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

감사합니다. – user3032010

관련 문제