![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFx0o6%2FbtsBiP9x8gY%2FRgFaGHVvKIBvznOjAZ4iJK%2Fimg.png)
C, C++/C TCP, IP 2023. 12. 1.
3.4 IP 초기화
문자열 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..
![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbui2OX%2FbtsBjopVw67%2FhJ4YDVCkxOYt85J5VqleXk%2Fimg.png)
C, C++/C TCP, IP 2023. 12. 1.
3.3 Network Byte Order (&엔디안)
Network 네트워크란, : "물리적으로연결되어 있는" 서로 다른 두 컴퓨터가 데이터를 주고 받는 것이다. 주고 받는 데이터는 Byte 단위로 처리되고, bit 단위로 송수신다. bit & Byte 비트란, : 컴퓨터가 데이터를 구성하는 최소 단위는 bit(binary digit)라는 0과 1을 저장하는 2진수 한자리 단위이다. 바이트란, : 컴퓨터가 데이터를 처리하는 최소 단위는 Byte 라는 8bit, 즉 1Byte 단위다. Endianness 엔디안이란, : 컴퓨터의 메모리와 같은 1차원의 공간에 여러 개의 연속된 대상(Byte)이 저장되는 순서(Byte order) 리틀 엔디언 & 빅 엔디언 개념 정리 링크 1 리틀 엔디언 & 빅 엔디언 개념 정리 링크 2 예시1. Decimal to Binar..
![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSB0Mr%2FbtsBc12tW4p%2FRQopO0dsMPXcxKiLhheHZk%2Fimg.png)
C, C++/C TCP, IP 2023. 11. 29.
2.1 socket & protocol
protocol: 규약 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..
C, C++/C TCP, IP 2023. 11. 29.
[Win] Warning C4013 'inet_pton' undefined
InetPtonW 함수(ws2tcpip.h) - Win32 apps | Microsoft Learn InetPtonW 함수(ws2tcpip.h) - Win32 apps InetPton 함수는 표준 텍스트 프레젠테이션 형식의 IPv4 또는 IPv6 인터넷 네트워크 주소를 숫자 이진 형식으로 변환합니다. 이 함수의 ANSI 버전은 inet_pton. (InetPtonW) learn.microsoft.com InetPton InetPtonW
![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfKZBs%2FbtsA7Qm8izo%2FRhJA0QZYKk7QEkKOoJ9rMK%2Fimg.gif)
C, C++/C TCP, IP 2023. 11. 29.
[Win] winsock
소켓 통신 프로그래밍 내부적으로 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 윈도우 소켓 실행 흐름 ..
![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuFEm4%2FbtsA4WnH6wM%2FQKUs7waBKLSfCpek3fZDsK%2Fimg.png)
C, C++/C TCP, IP 2023. 11. 28.
[Win]
환경설정 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);..
![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fpx9yX%2FbtsAZ989GXV%2FEfP8B79OFlcT6SP2kXzyB1%2Fimg.png)
C, C++/C TCP, IP 2023. 11. 28.
1.4 File Descriptor
파일 디스크립터(File Descriptor) *Linux의 File Descriptor 는, Window에서 handle에 해당한다. 파일 디스크립터란, C 언어와 같은 프로그래밍 언어가 아닌 시스템(OS)에 의해 관리되는 일련의 정수값으로 파일 또는 소켓의 식별에 사용된다. 윈도우는 파일과 소켓을 구분한다. ▶ UNIX에서 파일을 새로 열면(open) int 타입의 정수를 리턴하는데, 이는 파일 기술자 테이블(file descriptor table) 의 index 번호다. ▶ 예를들어, 2개의 파일을 open하면 파일 기술자는 3과 4가 배정되며, 소켓을 생성하면 파일 기술자와 똑같은 기능과 역할을 하는 소켓 기술자(socket descriptor)가 리턴된다. 즉, 파일과 소켓이 기술자 테이블을 공..
![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ9Im8%2FbtsA6R0y8bs%2FtAkuhtKdGeXxP3lxZbkEzk%2Fimg.png)
C, C++/C TCP, IP 2023. 11. 28.
1.3 Source Code
// 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 ==..
![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA74MI%2FbtsA3z0uYjk%2FJYwJQpv8sYAmMh4rXTyrz1%2Fimg.png)
C, C++/C TCP, IP 2023. 11. 28.
1.2 Server Client
서버 소켓 프로그래밍 (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..
![](http://i1.daumcdn.net/thumb/C400x300/?fname=https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCMyJ4%2FbtsA1fuBe0r%2FyTmRvWQn0qFIwNnm8yKFXk%2Fimg.png)
C, C++/C TCP, IP 2023. 11. 24.
1.1 Socket Networking
Networking 네트워크로 연결되어 있는 서로 다른 두 컴퓨터가 데이터를 주고 받을 수 있도록 하는 것 물리적인 연결이 필요하다. Socket Socket 은 단말(eg. 전화기)을 논리적인 소스코드로 추상화한 형태다. 일반적인 컴퓨터에서 다루는 모든 프로그램의 네트워크는, C언어 POSIX library 의 기반이다. Socket 표준 이라고 한다. C, C++, C#, Java, Python 등 프로그래밍 언어에서 사용하는 네트워크 라이브러리도 마찬가지다. 내부적으로 Socket 표준을 기반으로 조금 더 편리하게 사용하도록 발전된 형태의 라이브러리들에 불과하다. API / 클래스 설명 제공 기능 OS/PL Unix Socket API 네트워크 표준 API Low Level 의 소켓 프로그래밍 TC..
![로딩중](http://t1.daumcdn.net/tistory_admin/static/mobile/m640/img_loading.gif)