일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 상위포지션
- 계절성 모델
- 최소-최대 정규화
- 지수평활법
- 시계열 특성을 고려한 이상치 탐지
- 시계열 모델링
- 데이터 분석 프로세스
- 명목형 데이터
- ARIMA 모델링
- 다변량 분석
- 날짜 시간 데이터 전처리
- 상관 분석
- Z-점수 기반 이상치 탐지
- 주성분 줄이기
- 다중상관분석
- 순서형 데이터
- 주성분 분석
- 범주형 데이터
- 시계열 상관 분석
- R과 Python
- 선형 판별 분석 LDA
- 상자 그림
- 군집화 시각화 방법
- Q-Q 플롯
- Python
- 데이터의 차원 축소
- custom vision
- ARMA 모델링
- 데이터 종류에 따른 분석 방법
- 데이터 수집 및 전처리
Archives
- Today
- Total
me made it !
2024년 8월 19일 월요일 오늘의 TIL 본문
반응형
10 : 00 ~ 12 : 00 | 네트워크 키워드 정리 |
13 : 00 ~ 17 : 00 | 코어타임 + echo() 구현 |
1* : 00 ~ 25 : 00 | 구현 함수 복습 |
1. ECHO 구현
#include "csapp.h"
int main(int argc, char **argv) // argc: 입력받은 인자의 수 argv: 입력받은 인자들의 배열
{
int clientfd;
char *host, *port, buf[MAXLINE];
rio_t rio;
if (argc != 3)
{ // 파일 실행 시 인자를 제대로 넘겨주지 않았을 경우
fprintf(stderr, "usage: %s <host> <port>\n", argv[0]); // 안내 메세지를 출력하고,
exit(0); // 어플리케이션 종료
}
host = argv[1]; // 전달해준 첫 번째 인자를 host에 저장
port = argv[2]; // 전달해준 첫 번째 인자를 port에 저장
clientfd = Open_clientfd(host, port); // 소켓 인터페이스 핸들링을 도와주는 Open_clientfd 함수를 호출하여 서버와 연결하고, 리턴받은 소켓 식별자를 clientfd에 저장
Rio_readinitb(&rio, clientfd); // rio 구조체를 초기화하고, rio를 통해 파일 디스크립터 clientfd에 대한 읽기 작업을 수행할 수 있도록 설정
while (Fgets(buf, MAXLINE, stdin) != NULL)
{ // 반복하여 유저에게서 받은 입력을 buf에 저장하는데, 입력이 끊기거나 오류가 발생한다면 반복문을 종료
Rio_writen(clientfd, buf, strlen(buf)); // 파일 디스크립터를 통해 buf에 저장된 데이터를 서버로 전송
Rio_readlineb(&rio, buf, MAXLINE); // rio 구조체를 통해 파일 디스크립터에서 한 줄의 문자열을 읽어와 buf에 저장, MAXLINE은 버퍼의 최대 크기
Fputs(buf, stdout); // buf에 저장된 문자열을 표준 출력 stdout에 출력해줌
}
Close(clientfd); // 파일 디스크립터를 닫아서 클라이언트의 연결을 종료하고 사용한 리소스를 반환해줌
exit(0);
}
#include "csapp.h"
void echo(int connfd); // 클라이언트와 통신하는 함수 echo를 선언
int main(int argc, char **argv)
{
int listenfd, connfd; // 리스닝 소켓과 연결된 클라이언트 소켓의 파일 디스크립터
socklen_t clientlen; // 클라이언트의 주소 길이
struct sockaddr_storage clientaddr; // 클라이언트의 주소 정보를 저장하는 구조체
char client_hostname[MAXLINE], client_port[MAXLINE]; // 클라이언트의 호스트 이름과 포트 번호를 저장하는 배열
if (argc != 2)
{ // 프로그램 실행 시 포트 번호를 인자로 입력하지 않았을 경우
fprintf(stderr, "usage: %s <port>\n", argv[0]); // 사용법을 출력하고
exit(0); // 프로그램 종료
}
listenfd = Open_listenfd(argv[1]); // 주어진 포트 번호로 리스닝 소켓을 열어서 파일 디스크립터를 얻음
while (1)
{ // 무한 루프
clientlen = sizeof(struct sockaddr_storage); // 클라이언트의 주소 길이를 초기화
connfd = Accept(listenfd, (SA *)&clientaddr, &clientlen); // 클라이언트의 연결을 받아들이고, 연결된 클라이언트 소켓의 파일 디스크립터를 얻음
Getnameinfo((SA *)&clientaddr, clientlen, client_hostname, MAXLINE, client_port, MAXLINE, 0); // 클라이언트의 호스트 이름과 포트 번호를 얻음
printf("Connected to (%s, %s)\n", client_hostname, client_port); // 연결된 클라이언트의 정보를 출력
echo(connfd); // 클라이언트와 통신하는 echo 함수 호출
Close(connfd); // 클라이언트 소켓을 닫음
}
exit(0);
}
void echo(int connfd)
{
size_t n;
char buf[MAXLINE];
rio_t rio;
Rio_readinitb(&rio, connfd);
while ((n = Rio_readlineb(&rio, buf, MAXLINE)) != 0)
{
printf("server received %d bytes\n", (int)n);
Rio_writen(connfd, buf, n);
}
}
2. notion 정리.
https://lying-failing-e60.notion.site/11-867075390c4b4c1d99a1af779af03e82?pvs=4
11장 네트워크 프로그래밍 | Notion
11.1 클라이언트 - 서버 프로그래밍 모델
lying-failing-e60.notion.site
정말 오랜만에 TIL을 적어본다 !! 요즘 노션에 공을 들였더니 블로그에 애정을 쏟을 시간이 하나도 없었떠랬다.
뭐랄까. 이번주 네트워크가 제일 어려운 거 같은건 나뿐일까 ? 개념 정리에도 이렇게 애를 쓰고 있는데 이 애매모호한 머릿속을 누가 말끔히 해결해줬으면 좋겠다.!
내일부터 꼭 til 도 쓰고 노션도 잘쓰고 해야겠따 . 오늘의 다짐 끝.
반응형
'크래프톤 정글 > TIL' 카테고리의 다른 글
[TIL] 2024년 7월 24일 오늘의 TIL (3) | 2024.07.24 |
---|---|
[TIL] 2024년 7월 23일 오늘의 TIL (7) | 2024.07.24 |
[TIL] 2024년 7월 19일 오늘의 TIL (0) | 2024.07.20 |
[TIL] 2024년 7월 16일 오늘의 TIL (0) | 2024.07.16 |
[TIL] 2024년 7월 15일 오늘의 TIL (0) | 2024.07.15 |