728x90

프로그래밍 410

Network] UDP 주요 함수

bind Function int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);성공 : 0, 실패 : -1 - sockfd : 주소를 할당할 서버 소켓 디스크립터- addr : 서버의 주소 정보를 담은 구조체(IP주소, 포트 번호 등)- addrlen : addr에 저장된 주소 정보 크기(byte) 수신된 패킷의 포트번호와 이를 처리할 프로세스를 지정하기 위해 을 연결서버 주소 정보를 addr을 통해 전달 가능 recvfrom Function ssize_t recvform(int sockfd, void* buf, size_t len, int flags, struct sockaddr* src_addr, socklen_t* addrlen)..

Network] TCP 상태 전이

TCP 상태 전이 연결 단계 : 3-way HandShaking 1. TCP는 종단 host 간의 논리적 접속을 설정하기 위해 3-way HandShaking 사용 Client->Server : TCP SYNClient->Server : TCP ACKServer->Client : TCP SYN ACK SYN : Synchornize Sequence NumbersACK : Acknowledgement 2. TCP 연결 과정을 상태 전이도 측면 #1 : Client는 Sserver에 접속 요청하는 SYN Packet을 보내고, Server의 응답을 기다리는 SYN_SENT 상태로 전이#2 : Server는 SYN 요청을 수신하고 Client에게 요청을 수락하는 ACK와 SYN 플래그가 설정된 Packet을 ..

Network] TCP 소켓 데이터 전송 특징

TCP 헤더(IPv4) 바이트 스트림을 Segment 단위로 나눔Segment : TCP를 이용하여 두 종단 호스트 간에 전달되는 데이터 단위 송신지 포트번호16bit수신지 포트 번호16bit순서번호(Sequence Number)32bit확인 응답 번호(Acknowledgement Number)32bit헤더 길이4bit예약6biturgackpshrstsynfinWindow16bit검사 합16bit긴급 포인터(Urgent Pointer)16bit옵션 & 패딩(Padding) 1. 송/수신지 포트 번호 16bitsegment 전송하는 host에 있는 응용프로그램의 포트 번호를 의미 2. 순서 번호(SEQ) 32bitsegment에 포함된 데이터의 첫 번째 바이트에 부여된 32비트 부호 없는 번호를 의미수신지..

Network] TCP 기반 클라이언트 프로그램 주요 함수

connect Function 서버와 통신을 위한 연결(세션)을 생성연결할 서버의 주소 정보를 설정해야 함 int connect(int sockfd, const struct sockaddr* addr, socklen_t addrlen);return 0(success), -1(fail) - sockfd : 서버에 연결 요청하기 위한 클라이언트 소켓 디스크립터- addr : 연결할 서버의 주소 정보가 설정된 구조체- addrlen : addr의 크기 read Function 전송된 메세지를 수신하기 위해 사용LINUX에서는 소켓이나 파일을 동일한 타입의 디스크립터로 정의하므로 데이터 수신할 때 사용 가능 ssize_t read(int fd, void* buf, size_t nbytes);성공 : 읽은 데이터..

Network] TCP 기반 서버 프로그램 주요 함수

bind Function listen function에서 사용할 server socket의 서버 주소 정보 설정서버 주소 정보를 두 번째 인자 addr을 통해 전달 가능 int bind(int sockfd, const struct sockaddr* addr, socklen_t addrlen);return 0(success) or 1(fail) - sockfd : 주소를 할당할 서버 소켓 디스크립터- addr : 서버 주소 정보를 담은 구조체(IP Address, Port Number, etc..) listen Function 클라이언트의 연결 요청을 수신하기 위한 서버 소켓 지정'연결 요청 대기 큐' 생성 int listen(int sockfd, int backlog);return 0(success) o..

Network] IPv4, IPv6

IPv4 32bit 주소체계Network ID와 Host ID로 구성.현재는 다양한 기기가 고유 주소가 필요하여 IPv6로 전환하고 있음Network ID와 Host ID에 할당되는 비트 길이에 따라 Class 구분(A, B, C, D, E; Class E는 예약되어 사용 불가)일부 IP 주소는 특수목적을 위해 예약되어 있음 - 서브넷 많은 기기를 연결할 수 있는 네트워크를 다수의 작은 네트워크로 분할일반적으로 Class A, B 네트워크 대상분리된 네트워크는 별도의 망이 되어 다른 곳에서 이용 가능 Network ID와 서브넷 번호에 해당하는 부분은 1로 마스크를 구성Host ID에 해당하는 부분은 0으로 구성 Internet Protocol Version 4를 선택해 설정 가능 IPv6 128bit ..

Network] 소켓 주소 구조

1234typedef struct sockaddr { u_short sa_family; char sa_data[14];} SOCKADDR;cs sa_family주소 체계를 나타내는 16bit valueex) TCP/IP Protocol, AF_INET or AF_INET6 sa_data해당 주소 체계에서 사용할 주소 정보ex) TCP/IP Protocol IP Address and Port TCP/IP -> SOCKADDR_IN{} or SOCKADDR_IN6{}IrDa -> SOCKADDR_IRDA{} IPv4 123456789101112131415161718typedef struct sockaddr_in{ short sin_family; u_short sin_port; struct in_addr si..

Arduino] 7세그먼트 사용하기

세그먼트 자체에 대한 이해도 필요했고, 캐소드식과 애노드식에 대한 이해도 필요해서 꽤 오래 걸렸습니다. 어젯밤에 진짜 삽질해가지고, 작동은 커녕 아두이노 기판을 못 쓸 지경으로 만들 뻔했습니다. 회로에 대해서 최소한의 지식이 있다고 생각은 했는데, 정말 만행을 저질러서.. 새벽에 일어나서 회로를 보고 다시 적용해서 작동하는데 성공했습니다. 지금 당장 아두이노를 해보면서 느끼는 건 코딩쪽에서의 애로사항보다는 회로쪽에서 애로사항이 더 많습니다. 최소한의 지식마저도 없이 접근하면 합선이 발생해 기판이 고장나는 것과 같은 문제가 발생하겠구나 싶었습니다. 저도 배우는 입장이라, 직접 해보면서 많이 배웁니다. 기껏해봐야 LED, 부저, 세그먼트, 온도센서 이 네 가지밖에 안 건드렸는데도, 꽤나 배운게 많습니다. 1..

C,C++] Strlen와 동일한 기능을 하는 함수 구현

사실 함수 구현이라고 적어두긴 했으나,strlen과 비슷한 함수를 작성한 것 뿐이며,포인터를 이용하거나 하지 않았기 때문에,사용자가 정의한 함수라고 보기도 어렵다.그저 이러이러한 논리로 strlen과 비슷할 것이다가 전부일 뿐이므로, 오해는 금물이다.이 소스를 int str_len(char *s)와 같은 함수를 이용하여 strlen함수와 유사하게 만들 수 있다. 12345678910111213141516#include #include using namespace std; int main(){ char str[40] = "Make String Library Function"; int func, i = 0; func = strlen(str); while (str[i] != 0) i++; cout

Arduino] 부저 사용

부저를 0.05초 가량 울리고, 동시에 그 시간 동안 LED도 점등한 뒤, 나머지 0.95초에는 LED와 부저가 작동하지 않는 소스입니다. 사실상 1초에 1회 부저가 울린다고 보면 되고, 그에 따라 LED도 같이 깜빡거립니다. 1234567891011121314151617#define BUZ 11#define LED 8void setup() { // put your setup code here, to run once: pinMode(BUZ,OUTPUT); pinMode(LED,OUTPUT);} void loop() { // put your main code here, to run repeatedly: digitalWrite(BUZ,HIGH); digitalWrite(LED,HIGH); delay(50);..

728x90