C, C++/C Socket
3.4 IP 초기화
3.4 IP 초기화
2023.12.01문자열 IP 주소를 네트워크 바이트 순서(빅 엔디안)로 변환 inet_addr( ) vs inet_aton( ) 사용 sockaddr _in struct sockaddr_in { sa_family_t sin_family; // 주소체계(Address Family) uint16_t sin_port; // 16 비트 Port 번호 struct in_addr sin_addr; // 32 비트 IP주소, 빅 엔디안 char sin_zero[8]; // 사용되지 않음 } IP주소 211.214.107.99와 같은 ‘십진수 표현방식(Dotted Decimal Notation)'을 네트워크 바이트 순서의 IP가 변환한다. 방법 1) inet_addr( ) #include in_addr_t inet_addr(cons..
3.3 Network Byte Order (&엔디안)
3.3 Network Byte Order (&엔디안)
2023.12.01Network 네트워크란, : "물리적으로연결되어 있는" 서로 다른 두 컴퓨터가 데이터를 주고 받는 것이다. 주고 받는 데이터는 Byte 단위로 처리되고, bit 단위로 송수신다. bit & Byte 비트란, : 컴퓨터가 데이터를 구성하는 최소 단위는 bit(binary digit)라는 0과 1을 저장하는 2진수 한자리 단위이다. 바이트란, : 컴퓨터가 데이터를 처리하는 최소 단위는 Byte 라는 8bit, 즉 1Byte 단위다. Endianness 엔디안이란, : 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상(Byte)이 저장되는 순서(Byte order) 리틀 엔디언 & 빅 엔디언 개념 정리 링크 1 리틀 엔디언 & 빅 엔디언 개념 정리 링크 2 예시1. Decimal to Binar..
3.1 IP & Port
3.1 IP & Port
2023.12.01전화기에 전화번호라는 유일한 값을 할당하여, "전화기"를 구분합니다. 소켓도 IP와 Port 번호를 할당하여 인터넷 상에서 컴퓨터와 프로그램을 식별합니다. IP Internet Protocol
2.1 socket & protocol
2.1 socket & protocol
2023.11.29protocol: 규약 family: 체계 socket( ) #include int socket(int domain, int type, int protocol) // 성공시 디스크립터 반환, 실패시 -1 반환 // domain : 소켓이 사용할 프로토콜 체계(Protocol Family) 정보 전달 // type : 소켕의 데이터 정보 전달 방식 // protocol : 두 컴퓨터 간에 통신에 사용되는 프로토콜 정보 전달 int domain 프로토콜 체계(Protocol Family) 이름 정의 PF_INET IPv4인터넷 프로토콜 PF_INET6 IPv6인터넷 프로토콜 PF_LOCAL LOCAL 통신을 위한 UNIX 프로토콜 PF_PACKET Low level socket을 위한 인터페이스 PF_IPX..
[Win] Warning C4013 'inet_pton' undefined
[Win] Warning C4013 'inet_pton' undefined
2023.11.29InetPtonW 함수(ws2tcpip.h) - Win32 apps | Microsoft Learn InetPtonW 함수(ws2tcpip.h) - Win32 apps InetPton 함수는 표준 텍스트 프레젠테이션 형식의 IPv4 또는 IPv6 인터넷 네트워크 주소를 숫자 이진 형식으로 변환합니다. 이 함수의 ANSI 버전은 inet_pton. (InetPtonW) learn.microsoft.com InetPton InetPtonW
[Win] winsock
[Win] winsock
2023.11.29소켓 통신 프로그래밍 내부적으로 Socket 표준을 기반으로 조금 더 편리하게 사용하도록 발전된 형태의 라이브러리들에 불과하다. API / 클래스 설명 제공 기능 OS/PL Unix Socket API 네트워크 표준 API Low Level 의 소켓 프로그래밍 TCP, UDP 등 다양한 네트워크에 사용 Unix(+ Ubuntu, Redhat..) Window WinSock2 API Socket API 윈도우 버전 Window(C/C++) C# .NET Sockets WinSock2 API C# 버전 Sockets 닷넷은 WinSock2 API 호출 Window(C#) TcpClient 내부적으로 Sockets 클래스 사용 TCP, UDP 전용 TcpListner UdpClient 윈도우 소켓 실행 흐름 ..
[Win]
[Win]
2023.11.28환경설정 ws2_32.lib 라이브러리 추가 VS2013이상 솔루션 → 프로젝트 → 속성 → 구성 속성 → 링커 → 입력 → 추가 종속성 → ws2_32.lib 추가 Server_Window #include #include #include #include void ErrorHandling(char* message); int main(int argc, char* argv[]) { WSADATAwsaData; SOCKET hServSock, hClntSock; SOCKADDR_IN servAddr, clntAddr; int szClntAddr; char message[] = "Hello World!"; if (argc != 2) { printf("Usage : %s \n", argv[0]); exit(1);..
1.4 File Descriptor
1.4 File Descriptor
2023.11.28파일 디스크립터(File Descriptor) *Linux의 File Descriptor 는, Window에서 handle에 해당한다. 파일 디스크립터란, C 언어와 같은 프로그래밍 언어가 아닌 시스템(OS)에 의해 관리되는 일련의 정수값으로 파일 또는 소켓의 식별에 사용된다. 윈도우는 파일과 소켓을 구분한다. ▶ UNIX에서 파일을 새로 열면(open) int 타입의 정수를 리턴하는데, 이는 파일 기술자 테이블(file descriptor table) 의 index 번호다. ▶ 예를들어, 2개의 파일을 open하면 파일 기술자는 3과 4가 배정되며, 소켓을 생성하면 파일 기술자와 똑같은 기능과 역할을 하는 소켓 기술자(socket descriptor)가 리턴된다. 즉, 파일과 소켓이 기술자 테이블을 공..
1.3 Source Code
1.3 Source Code
2023.11.28// Server #include #include #include #include #include #include void error_handling(char *message); int main(int argc, char *argv[]) { int serv_sock; int clnt_sock; struct sockaddr_in serv_addr; struct sockaddr_in clnt_addr; socklen_t clnt_addr_size; char message[]="Hello World!"; if(argc!=2){ printf("Usage : %s \n", argv[0]); exit(1); } serv_sock=socket(PF_INET, SOCK_STREAM, 0); if(serv_sock ==..
1.2 Server Client
1.2 Server Client
2023.11.28서버 소켓 프로그래밍 (Server) 1. 서버 소켓 생성 소켓(socket)은 서버와 클라이언트가 동일한 형태다. #include int socket(int domain, int type, int protocol) // 성공시 파일 디스크립터 반환, 실패시 -1 반환 2. 서버 소켓 결합 서버에서 생성된 소켓(Server Socket)에 서버가 사용할 IP주소, Port번호를 결합(bind)시킨다. #include int bind(int sockfd, struct sockaddr *myaddr, socklen_t adrlen); // 성공시 0, 실패시 -1 3. 서버의 클라이언트 연결 요청 대기 listen( )의 역할은, 바인딩된 서버 소켓(Server Socket)으로 수신될 외부 클라이언트의 c..
1.1 Socket Networking
1.1 Socket Networking
2023.11.24Networking 네트워킹이란? 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고 받을 수 있도록 하는 것으로 물리적인 연결이 필요하다. Socket Socket 은 단말(eg. 전화기)을 논리적인 소스코드로 추상화한 형태다.일반적인 컴퓨터에서 다루는 모든 프로그램의 네트워크는, C언어 POSIX library 의 기반이다. Socket 표준 이라고 한다. C, C++, C#, Java, Python 등 프로그래밍 언어에서 사용하는 네트워크 라이브러리도 마찬가지다. 내부적으로 Socket 표준을 기반으로 조금 더 편리하게 사용하도록 발전된 형태의 라이브러리들에 불과하다. API / 클래스설명제공 기능OS/PLUnixSocket API네트워크 표준 APILow Level 의 소켓 프로그래밍..