본문 바로가기

Network/초급 TCP/IP socket

09. UDP에 connect() 사용 TCP소켓의 흐름에서 connect()를 사용하여 지정된 주소로 연결을 시도합니다 전화를 걸기위해 번호를 누르는것과 비슷한데 원형은 이렇습니다 int connect(int socket, const struct sockaddr *foreignAddress, socklen_t addressLength) 소켓을 통해 앞으로 전송 할 데이터그램의 목적지 주소를 고정하기 위해서 UDP소켓상에서 connect()을 사용하는 것이 가능합니다 연결이 되면 목적지를 저장할 필요가 없기 때문에 sendto() 대신 send()를 이용하면 됩니다 연결이 이루어진 지정한 주소로만 데이터의 송수신이 가능합니다 #include #include #include #include #include #include #include voi.. 더보기
08. TCP / UDP 데이터 전송 경계 확인 TCP or UDP기반의 데이터 전송의 경계를 확인하여 보겠습니다 설명) UDP에 비해 TCP의 장점은 1. 신뢰할수있다 2. 데이터 누락 처리가 가능하다 3. 데이터 순서바낌처리가 가능하다 4. 데이터 경계가 없다 등이 있습니다 여기에선 4 데이터 경계가 없는 TCP와 경계가 있는 UDP에 대헤서 살펴 보도록 하겠습니다 일단 아래 그림을 참고하여 TCP의 결과는 보낸 문자열을 서로 구분하지 않고 2개씩 3개씩 혹은 몰아서 한꺼번에 recv에서 수신버퍼로 처리가 가능합니다 데이터의 경계가 없어서 넘어온 데이터는 송신버퍼에 쌓인후 순서대로 수신버퍼로 보내지게 됩니다 하지만 UDP의 경우 아래 그림을 참고하시면 보내는 수신버퍼와 받는 송신버퍼가 1:1임을 알수있습니다 ABC를 보내고 DEF 를 보내면 ABC.. 더보기
07. TCP 에코 서버 소켓( (TCP ECHO SERVER SOCKET) TCP에코 클라이언트에 이어 TCP에코 서버를 구현해 보았습니다 TCPEchoServer.c #include #include #include #include #include #include #include #include "practical.h" /* 연결 요청을 대기 할 수 있는 최대수 */ static const int MAXPENDING = 5; int main (int argc, char * argv[]) { int clntSock; int servSock; //서버 소켓 식별자 char clntName[INET_ADDRSTRLEN]; in_port_t servPort = atoi(argv[1]); //첫번째 인자 : 지역포트 struct sockaddr_in servAddr; struct soc.. 더보기
06. TCP 에코 클라이언트 소켓 (TCP ECHO CLIENT SOCKET) 에코 서버/클라이언트: 서버/클라이언트가 전송해 주는 데이터를 그대로 되돌려 전송해 주는 기능의 서버/클라이언트를 말합니다 클라이언트에 메세지를 입력하고 서버로부터 되돌아온 메세지를 화면에 출력합니다 참고1) 실행 ./실행파일 IP주소 메세지 의 형태로 합니다 참고2)linux에코 설정 setup 설정후 리셋해준다 IPv4 TCP 클라이언트 중요한 4가지 단계 1.socket()을 이용하여 TCP소켓을 생성 2.connect()를 이용하여 서버와의 연결을 설정 3.send(),recv()를 이용하여 통신을 수행 4.close()를 이용하여 연결을 종효 #include #include #include #include #include #include #include #include #include "prac.. 더보기
05. UDP통신흐름 참고!! TCP : 연결형(연결요청,허락)(connect, accept, listen)등의 과정이 있다 UDP : 비연결형으로(연결요청,허락)(connect, accept, listen)등의 과정이 없다 연결형서버 (TCP소켓) 비연결형서버( UDP소켓) interactive 서버 : 클라이언트에 서비스 요구를 순서대로 처리 concurrent 서버 : 클라이언트가 동시에 요청을 할때 동시에 처리를 한다 UDP 통신흐름 server client 서버소켓생성 클라이언트소켓생성 socket(PF_INET,SOCK_DGRAM,0); 소켓에 주소할당 bind() 송 / 수신 송 / 수신 sendto(),recvfrom()사용 클라이언트 소켓닫기 클라이언트 소켓닫기 UDPclient UDPserver 결과 더보기
04. Server / Client TCP통신흐름 리눅스 프로그래밍 TCP/IP통신의 흐름을 리눅스 프로그래밍을 통하여 살펴보도록하겠습니다 참고1)구조체 sockaddr_in구조체 { ip주소, 포트번호, 설정 } 참고2)server프로그램 공통 socket생성 Socket() 응용프로그램이 이를 통해 데이터를 송수신할수 있는 추상화된 개념 #include #include int socket(int domain, int type, int protocol); socket(PF_INET,SOCK_STREAM,0); int domain : 소켓의 통신 영역을 결정합니다 AF_INET(IPv4)(IPv6) PF_INET int type : 생성될 소켓이 어떠한 방식으로 데이터를 전송할지를 결정합니다 SOCK_STREAM /DGRAM int protocol : 사용될 종단 간 프.. 더보기
03. 주소의 표현 방식3가지와 전환 주소는 크게 3가지방식이 있습니다 1) Domain name = www.naver.com 2) 32bit ip address = 0x1000 07f 3) Dotted.decimal =127.1.1.1 1)aton #include #include void error_handling(char* message); int main() { char* addr = "255.2.3.255"; struct sockaddr_in addr_inet; if( !inet_aton(addr, &addr_inet.sin_addr)) error_handling("Conversion error"); printf("unsigned long address(network ordered) : %x \n\n", addr_inet.sin_ad.. 더보기
02. htons htonl ntohs ntonl (little endian / big endian) intel cpu는 little endian를 사용합니다 Num = 0x12345678 라고 입력했더라도 메모리에는 78 56 34 12로 저장 되어 있습니다 지만 네크워크는 big endian을 사용합니다 참고))motorola cpu계열은 big endian을 사용합니다 바로 넘기면 됩니다!! 순서대로 읽어드립니다 그래서 pc의 port와 ip를 받게되면 Num = 0x78563412 로 나타내게 되어 뒤집어지게 됩니다 그래서 error 가 발생하게 됩니다 struck sockaddr_in 에서 short + 2byte port 9190 경우 1)pc에서 네트워크로 전송시에는 : htons(host to network short) 2)네트워크에서 pc 전송시에는 : ntohs(network to ho.. 더보기
01. 네트워크 프로그래밍 (TCP/IP 소켓 프로그래밍) TCP/IP 1. 프로토콜(Protocol) - 종단 시스템간 어떻게 데이터 교환을 할 것인지 정한 통신 규약 2. TCP/IP - 호스트들이 상호 통신하기 위한 표준화된 프로토콜 3. TCP/IP 프로토콜 계층 구조 소켓(Socket) 1. 소켓이란 떨어져 있는 두 호스트를 연결해주는 도구를 말합니다 2. 운영체제가 만들어 주는 S/W적인 장치 3. 트랜스포트 계층(TCP,UDP)을 이용하는 API 4. 소켓을 생성한다는 것은 시스템 내부적으로 통신에 필요한 리소스를 할당하는 것을 의미함 소켓통신 흐름의 이해 LInux의 특징 1) Linux에서는 콘솔, 소켓, 파일 등을 파일로 간주합니다 1. 모두 파일 디스크립터가 할당됩니다 2. 파일 입출ㄹ력 함수를 소켓에서도 사용가능합니다 -read(), wri.. 더보기