tcp로 에코서비스 주고받는 소스코드에 대해서 질문드려요
한국드립
echoserv1은 서버의 역할을 하고 echocli1은 클라이언트 역할을 합니다.
클라이언트가 bye를 입력하기 전까지 서버와 계속 연결되어야 하고 bye를 입력하는 순간 양쪽 프로그램이 종료되어야 합니다.
세번만에 저절로 종료되고 bye를 입력해도 종료되지 않습니다. 도와주세요
==============================
tcp_echoserv1.c
================================
#include stdio.h
#include stdlib.h
#include string.h
#include sys/types.h
#include sys/socket.h
#include netinet/in.h
#include unistd.h
#define MAXLINE 127
int main(int argc, char *argv[]){
struct sockaddr_in servaddr, cliaddr;
int listen_sock, accp_sock, addrlen = sizeof(cliaddr), nbyte;
char buf[MAXLINE+1];
char end[] = bye;
if(argc != 2){
printf(usage :%s port\n, argv[0]);
exit(0);
}
if((listen_sock = socket(PF_INET, SOCK_STREAM, 0))0){
perror(socket fail);
exit(0);
}
bzero((char *)&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(atoi(argv[1]));
if(bind(listen_sock, (struct sockaddr *)&servaddr, sizeof(servaddr))0){
perror(bind fail);
exit(0);
}
listen(listen_sock, 5);//연결준비됨
do{
puts(서버가 연결요청을 기다림..);
accp_sock=accept(listen_sock,(struct sockaddr *)&cliaddr, &addrlen); //연결
if(accp_sock0){
perror(accpet fail);
exit(0);
}
puts(클라이언트가 연결됨..);
nbyte = read(accp_sock, buf, MAXLINE);
write(accp_sock, buf, nbyte);
close(accp_sock);
}while(strcmp(buf,end)!=0); //end에 저장된 bye와 클라이언트에서 읽어온 buf를 비교, 같으면 루프를 빠져나옵니다.
close(listen_sock);
return 0;
}==========================
tcp_echocli1.c
=========================
#include stdio.h
#include stdlib.h
#include string.h
#include unistd.h
#include sys/types.h
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#define MAXLINE 127
int main(int argc, char *argv[]){
int s, nbyte;
struct sockaddr_in servaddr;
char buf[ MAXLINE+1 ];
p; char end[] = bye;
if(argc != 3){
printf(Usage : %s ip_address and port_num\n, argv[0]);
exit(0);
}
if((s = socket(PF_INET, SOCK_STREAM, 0)) 0){
perror(socket fail);
exit(0);
}
bzero((char *) &servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
servaddr.sin_port = htons(atoi(argv[2]));
if(connect(s,(struct sockaddr *)&servaddr, sizeof(servaddr)) 0){ //서버와 연결
perror(connect fail);
exit(0);
}
do{
printf(입력: );
if(fgets(buf, sizeof(buf), stdin) == NULL)
exit (0);
nbyte = strlen(buf);
if(write(s,buf,nbyte)0){
printf(write error\n);
exit(0);
}
printf(수신: );
if((nbyte = read(s,buf,MAXLINE)) 0 ){
perror(read fail);
exit(0);
}
buf[nbyte] = 0;
printf(%s, buf);
}while(strcmp(buf,end)!=0); //서버와 마찬가지로 루프설정
close(s);
return 0;
}
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2692483 | C언어 함수, Header | 떠나간그놈 | 2025-04-23 |
2692451 | 이 문제좀 풀어주세요 ^^ | 게자리 | 2025-04-23 |
2692424 | 2차원배열 자료입력질문이요! (1) | 똘끼 | 2025-04-22 |
2692401 | 유닉스안에서 C언어를 이용한 명함 만들기 입니다; 이해안가는 부분이있네요 | 2gether | 2025-04-22 |
2692374 | 고수님들 댓글 마니부탁해요!!! (2) | 엄지 | 2025-04-22 |
2692343 | scnaf에 자꾸 선언을 참조하라는데;; (8) | 도래 | 2025-04-22 |
2692282 | 도스상에서 생성된 exe파일에 press~ 뜨게 하기 (4) | 회사원 | 2025-04-21 |
2692256 | scanf("%*c"); ㅠㅠ 고수님들 | 거북이 | 2025-04-21 |
2692230 | 하노이탑 질문입니다. (1) | 미쁘다 | 2025-04-21 |
2692210 | 정보 올림피아드 문제인데.. 풀이 과정이 궁금합니다.(재귀함수) (5) | 물티슈 | 2025-04-20 |
2692144 | C언어와 리눅스에 대한 질문입니다. | 싴흐한세여니 | 2025-04-20 |
2692114 | 컨텍스트 스위칭하는데 걸리는 시간 측정.. | YourWay | 2025-04-19 |
2692086 | 간접참조 연산자, 증감연산자 질문이용! (2) | 블랙캣 | 2025-04-19 |
2692056 | 주석좀 달아주세요. 몇개적엇는데 몇개만달아주세요. (2) | DevilsTears | 2025-04-19 |
2691978 | 진수 쉽게 이해하는법... (3) | 지지않는 | 2025-04-18 |
2691949 | getchar() 한 문자를 입력받는 함수 질문 | 채꽃 | 2025-04-18 |
2691919 | 배열 정렬 및 합치기 질문입니다. | 사과 | 2025-04-18 |
2691845 | c언어왕초보 질문이 있습니다........ | 루나 | 2025-04-17 |
2691815 | void add(int num); 함수... (4) | 살랑살랑 | 2025-04-17 |
2691756 | 명령 프롬프트 스크롤바가 없어요 | 두메꽃 | 2025-04-16 |