게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
정답을 그대로 했는데도 안되네요...도움을 주실 수 있을까요..
게시물ID : programmer_16694짧은주소 복사하기
작성자 : 컴공이안맞나
추천 : 0
조회수 : 486회
댓글수 : 4개
등록시간 : 2016/04/13 23:48:11
옵션
  • 본인삭제금지
윤형우 열혈 TCP/IP 쳅터6 연습문제 7번을 소스를 작성했는데
클라이언트에서 서버로 메시지를 보내는것까진 잘 동작하는데
그다음 서버에서 다시 클라이언트로 메시지를 보내는게 안되네요.....
무엇이 문제일까요;;;

이게 클라이언트 소스입니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 30
void error_handling(char *message);

int main(int argc, char *argv[])
{
        int sock;
        char message[BUF_SIZE];
        int str_len;
        socklen_t adr_size;

        struct sockaddr_in serv_adr, from_adr;
        if(argc != 3){
                printf("Usage : %s <IP> <port>\n", argv[0]);
                exit(1);
        }

        sock = socket(PF_INET, SOCK_DGRAM, 0);
        if(sock == -1)
                error_handling("socket() error");

        memset(&serv_adr, 0, sizeof(serv_adr));
        serv_adr.sin_family=AF_INET;
        serv_adr.sin_addr.s_addr=inet_addr(argv[1]);
        serv_adr.sin_port=htons(atoi(argv[2]));

        while(1)
        {
                fputs("Insert message(q to quit) : ", stdout);
                fgets(message, sizeof(message), stdin);
                if(!strcmp(message, "q\n") || !strcmp(message, "Q\n"))
                        break;

                sendto(sock, message, strlen(message), 0,
                                (struct sockaddr*)&serv_adr, sizeof(serv_adr));
                adr_size=sizeof(from_adr);
                str_len=recvfrom(sock, message, BUF_SIZE, 0,
                                (struct sockaddr*)&from_adr, &adr_size);
                message[str_len]=0;
                printf("Message from server : %s", message);
        }
        close(sock);
        return 0;
}

void error_handling(char *message)
{
        fputs(message, stderr);
        fputc('\n', stderr);
        exit(1);
}



그리고 이게 서버 소스입니다.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define BUF_SIZE 30
void error_handling(char *message);

int main(int argc, char *argv[])
{
        int serv_sock;
        char message[BUF_SIZE];
        int str_len;
        socklen_t clnt_adr_size;

        struct sockaddr_in serv_adr, clnt_adr;
        if(argc != 2){
                printf("Usage : %s <port>\n", argv[0]);
                exit(1);
        }

        serv_sock=socket(PF_INET, SOCK_DGRAM, 0);
        if(serv_sock == -1)
                error_handling("UDP socket creation error");

        memset(&serv_adr, 0, sizeof(serv_adr));
        serv_adr.sin_family=AF_INET;
        serv_adr.sin_addr.s_addr=htonl(INADDR_ANY);
        serv_adr.sin_port=htons(atoi(argv[1]));

        if(bind(serv_sock, (struct sockaddr*)&serv_adr, sizeof(serv_adr))==-1)
                error_handling("bind() error");

        clnt_adr_size=sizeof(clnt_adr);
        while(1)
        {
                str_len=recvfrom(serv_sock, message, BUF_SIZE, 0,
                        (struct sockaddr*)&clnt_adr, &clnt_adr_size);
                message[str_len]=0;
                printf("Message from client : %s", message);

                fputs("Insert message(q to quit) : ", stdout);
                fgets(message, sizeof(message), stdin);
                if(!strcmp(message, "q\n") || !strcmp(message, "Q\n"));
                        break;

                sendto(serv_sock, message, strlen(message), 0,
                        (struct sockaddr*)&clnt_adr, clnt_adr_size);
        }
        close(serv_sock);
        return 0;
}

void error_handling(char *message)
{
        fputs(message, stderr);
        fputc('\n', stderr);
        exit(1);
}


실행을 시키면....
제목 없음.png



클라이언트에서 서버쪽으로는 메시지가 가는데
서버에서 클라로 보내면 그냥 종료가되버리네요;;
클라는 무한 대기상태로 가는것같고....

정답그대로 했는데도....이러니;....뭐가문제일까요....ㅜㅜ
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호