2013-12-19 3 views
1

예를 통해 서버 및 클라이언트를 만들려고합니다. 예를 온라인으로 보았지만 똑같이 만들려고했으나 제대로 작동하지 않았습니다. 이유를 이해하십시오.서버 클라이언트 송수신이 작동하지 않습니다.

서버

int main(int argc, char *argv[]) 
{ 
    int socket_fd, cc, fsize; 
    struct sockaddr_in s_in, from; 
    struct { char head; u_long body; char tail;} msg; 
    char name[10]; 

    socket_fd = socket (AF_INET, SOCK_DGRAM, 0); 

    bzero((char *) &s_in, sizeof(s_in)); 

    s_in.sin_family = (short)AF_INET; 
    s_in.sin_addr.s_addr = htonl(INADDR_ANY);  
    s_in.sin_port = htons((u_short)0x3333); 
    fflush(stdout);  
    bind(socket_fd, (struct sockaddr *)&s_in, sizeof(s_in)); 

    for(;;) { 
    fsize = sizeof(from); 
    recvfrom(socket_fd,name,sizeof(name),0,(struct sockaddr *)&from,&fsize); 
    printf("Got data : %s",name); 
    fflush(stdout); 
    } 

    return 0; 
} 

는 클라이언트

int main(int argc, char *argv[]) 
{ 
    int socket_fd; //creating 1 int 
    struct sockaddr_in dest; 
    struct hostent *hostptr;  
    struct { char head; u_long body; char tail; } msgbuf; 
    char name[10]; 
    socket_fd = socket (AF_INET, SOCK_DGRAM, 0); 
    bzero((char *) &dest, sizeof(dest)); 
    hostptr = gethostbyname(argv[1]); 
    dest.sin_family = (short) AF_INET; 
    bcopy(hostptr->h_addr, (char *)&dest.sin_addr,hostptr->h_length); 
    dest.sin_port = htons((u_short)0x3333); 

    printf("Enter your name: "); 
    scanf("%s",name); 

    printf("%s",name); 
    sendto(socket_fd,name,sizeof(name),0,(struct sockaddr *)&dest,sizeof(dest)); 
    return 0; 
} 

누군가가 내 문제를 설명 할 수 있습니까?

+0

를 사용

int n; ... n = recvfrom(socket_fd,name,sizeof(name),0,(struct sockaddr *)&from,&fsize); if (n == -1) { perror("recvfrom"); exit(EXIT_FAILURE); } name[n] = '\0'; printf("Got data : %s",name); ... 

는 또한 bzerobcopy이되지 않습니다 점에 유의 당신이 그리워 저거'*/'/ *'의 말에 그들은 당신이 이것을해야한다고 말하십시오' – David

+0

그것의 문제가 아닙니다 잘 복사하지 못했습니다. – user3061943

+0

네,하지만 올바른 코드를 위해 추가하는 것이 좋습니다. – David

답변

1

NUL - 종료하여 버퍼 : memsetmemmove

+1

['recvfrom'] (http://pubs.opengroup.org/onlinepubs/7908799/xns/recvfrom.html) *가 오류시'-1'을 반환 할 수 있으므로주의해야합니다. 후속 할당은 정의되지 않은 동작을 호출합니다. – WhozCraig

+0

@WhozCraig, true, edited –

+0

+1 답장, btw. – WhozCraig

관련 문제