일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 리버싱
- 프론트엔드 개발자
- 메이플스토리 M 사전예약
- 재밌는 모바일게임
- 레나 리버싱
- C언어
- 배열 정렬
- 빅엔디언
- 구조체
- 프로그래밍 언어론
- abex crack me 2번 문제풀이
- 알고리즘
- 덧셈
- 배열
- 오버워치
- 마인크래프트
- c언어 알고리즘
- 리틀엔디언
- react native
- abex crack me 1번
- 배열 탐색
- 암호화폐
- 안드로이드 백도어
- Reverse Me
- sa 계정 비밀번호 변경
- 구조체 함수
- 1.9.2
- 네트워크 관리사 2급 필기
- UDP daytime
- abex crack me 5번문제
- Today
- Total
Gyejoong's Information
소켓 프로그래밍 클라이언트 코드(daytime,qotd,echo,finger) 본문
클라이언트 코드 (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");
}
'Study > Socket programming' 카테고리의 다른 글
소켓프로그래밍 서버 코드 (daytime, echo) (0) | 2016.10.05 |
---|---|
서버 공용코드 (daytime,qotd,echo,finger) (0) | 2016.09.30 |
클라이언트 공용코드(daytime,qotd,echo,finger) (0) | 2016.09.30 |