관리 메뉴

Gyejoong's Information

소켓 프로그래밍 클라이언트 코드(daytime,qotd,echo,finger) 본문

Study/Socket programming

소켓 프로그래밍 클라이언트 코드(daytime,qotd,echo,finger)

연계중 2016. 10. 5. 02:01
반응형

클라이언트 코드 (daytime, qotd, echo, finger)


daytime

※ 따로 추가할 헤더파일 없음.

※ 포트번호 13


int n;

char recvline[MAXLINE+1];

while( (n = read(sockfd,recvline,MAXLINE)) > 0){

recvline[n] = 0;

if (fputs(recvline, stdout) == EOF)

err_sys("fputs error");

}

if (n < 0)

err_sys("read error");

close(sockfd);

exit(0);


quote of the day

※ 따로 추가할 헤더파일 없음.

※ 포트번호 17


int n;

char recvline[MAXLINE+1];

while ( (n = read(sockfd,recvline,MAXLINE)) > 0){

recvline[n] = 0;

if (fputs(recvline,stdout) == EOF)

err_sys("fputs error");

}

if (n < 0)

err_sys("read error");


printf("\n");


close(sockfd);

exit(0);


echo

※ "common.h" 헤더파일 추가

※ void str_cli(FILE *fp, int sockfd); 함수 선언 추가

※ 포트번호 7


str_cli(stdin,sockfd);


close(sockfd);

exit(0);


void str_cli (FILE *fp, int sockfd){

char sendline[MAXLINE], recvline[MAXLINE];


while (fgets(sendline,MAXLINE,fp) != NULL){

if(writen(sockfd,sendline,strlen(sendline)) < 0)

err_sys("writen error");


int n;

if ( (n = readline(sockfd,recvline,MAXLINE)) < 0)

err_sys("readline error");

else if(n == 0)

err_quit("str_cli : server terminated prematurely");


recvline[n] = 0;

if (fputs(recvline,stdout) == EOF)

err_sys("fputs error");

}

}


readline.c

#include <stdio.h>

#include <errno.h>

#include <unistd.h>


ssize_t readline(int fd,  const void *vptr, size_t n)

{

ssize_t n, rc;

char    c, *ptr;

ptr = vptr;

for (n = 1; n < maxlen; n++){

again:

if( (rc = read(fd, &c, 1)) == 1){

*ptr++ = c;

if(c == '\n')

break;

} else if ( rc == 0) {

*ptr = 0;

return (n - 1);

} else{

  if (errno == EINTR)

goto again;

  return (-1);

}

}

*ptr = 0;

return (n);

}



writen.c

#include <stdio.h>

#include <errno.h>

#include <unistd.h>


ssize_t writen(int fd, const void *vptr, size_t n)

{

size_t nleft;

ssize_t nwritten;

const char *ptr;


ptr = vptr;

nleft = n;

while (nleft > 0) {

if ( (nwritten = write(fd, ptr, nleft)) <= 0) {

if (nwritten < 0 && errno == EINTR)

nwritten = 0;

else

return (-1);

}

nleft -= nwritten;

ptr += nwritten;

}

return (n);

}



common.h

#ifndef _COMMON_H_

#define _COMMON_H_


ssize_t writen (int filedes, const void *buff, size_t nbyte);

ssize_t readline (int filedes, void *buff, size_t maxlen);


#endif


finger

※ "common.h" 헤더파일 추가

※ <errno.h> 헤더파일 추가

※ void str_cli(FILE *fp, int sockfd); 함수 선언 추가

※ 포트번호 79


str_cli(stdin,sockfd);


close(sockfd);

exit(0);


void sttr_cli (FILE *fp, int sockfd)

{

char sendline[MAXLINE], recvline[MAXLINE];


if ( fgets(sendline, MAXLINE, fp) == NULL)

err_sys("fgets error");


if ( writen(sockfd, sendline, strlen(sendline)) < 0)

err_sys("writen error");


int n;

while ( (n = read(sockfd, recvline, MAXLINE)) > 0){

recvline[n] = 0;

if (fputs(recvline,stdout) == EOF)

err_sys("fputs error");

}

if (n < 0)

err_sys("read error");

}

반응형
Comments