Programming Blog

TCP 통신 본문

C#

TCP 통신

Go-ong 2019. 1. 17. 18:02

TCP/IP 통신

 

네트워크 프로그래밍 : 멀리 떨어져 있는 두 개의 호스트를 연결시켜주는 매개체 역할

 

server : 소켓 생성(socket) > 연결을 위한 IP주소 할당(bind) > 소켓 연결 가능 상태로 전환(listen) > 연결 요청 수락(accept)

client : 연결 요청(connect)

closesocket() 연결 종료

모든 실행이 끝나면 반드시 연결 종료한다.

 

서버에서 연결준비를 완료하고 클라이언트에서 연결을 요청한다.

 

윈속 기바의 데이터 입,출력 함수

send, recv

 

프로토콜 : 컴퓨터 상호간의 대화에 필요한 통신 규약, 즉 데이터를 주고 받는 방법을 약속하는 것이다.

 


 

소켓 생성

socket(int damain, int type, int protocol);

domain : 통신을 위해 사용할 프로토콜 체계, 소켓이 사용될 환경을 고려하여 프로토콜을 설정해야 한다.

type : 데이터 전송을 위한 전송 타입,

전송방식 2가지

SOCK_STREAM(신뢰성 있는 순차적인 바이트 기반의 연결 지향 전송 타입)

SOCK_DGRAM(빠른 전송, 데이터 손실 가능성, 데이터 크기 제한)

protocol : 특정 프로토콜 지정

프로토콜 체계가 PF_INET일 경우 전달인자

PF_INET, SOCK_STREAM, IPPROTO_TCP(0)    //연결 지향 TCP 소켓 생성

PF_INET, SOCK_DGRAM, IPPROTO_UDP(0)    //비연결 지향 UDP소켓 생성

 


 

프로세스 : 메모리상에 올라와 있는 실행중인 프로그램

 

바이트 순서

Big-Endian : 상위 바이트의 값이 메모리상에 먼저(번지수가 작은 위치에) 표시되는 방법

Little-Endian : 하위 바이트의 값이 메모리상에 먼저(번지수가 작은 위치에) 표시되는 방법

*네트워크 바이트 순서 : 서로 다른 CPU를 장착하여 주고 받는 데이터가 다를 수 있으므로 반드시 ★Big-Endian방식만 사용하는 약속

 

바이트 순서 변환 함수

h : host byte order

n : network byte order

s : short(16Bit)

l : long(32Bit)

 

short htons() : host byte(16bit) > network byte , 16비트 데이터를 호스트 바이트 순서에서 네트워크 바이트 순서로 변환하는 함수

short ntohs() : network byte(16bit) > host byte , 16비트 데이터를 네트워크 바이트 순서에서 호스트 바이트 순서로 변환하는 함수

long htonl() : host byte(32bit) > network byte , 32비트 데이터를 호스트 바이트 순서에서 네트워크 바이트 순서로 변환하는 함수

long ntohl() : network byte(32bit) > host byte , 32비트 데이터를 네트워크 바이트 순서에서 호스트 바이트 순서로 변환하는 함수

 

주소 정보 할당

bind 함수가 소켓에 주소 정보를 할당하는 역할을 한다

 


 

서버에서의 기본적인 함수 호출 순서

socket() / 소켓 생성

bind() / 소켓에 주소 할당

listen() / 연결 요청 대기 상태

accept() / 연결 허용

read() & write() / 데이터 송수신

close() / 연결 종료

 

클라이언트의 기본적인 호출 순서

socket() / 소켓 생성

connect() / 연결 요청

read() & write() / 데이터 송수신

close() / 연결 종료 

 

Server : socket > bind > listen > accept > read & write > close

Client : socket > connect > read & write > close

* 클라이언트 connect에서 연결 요청 > 서버에서 accept > 서버와 클라이언트에서 read & write 하여 데이터 송수신

 

 

Iterative 서버의 구현

accept함수의 호출 시점에서 클라이언트 연결 소켓을 생성한 후 적절한 데이터 송,수신 과정을 거친 다음 close함수를 호출해 주고 있는데

서버의 소켓을 종료하는 것이 아닌 클라이언트의 소켓을 종료하는 것이 목적임을 주의해야 한다. 그렇게 클라이언트의 요청을 서버에서

반복적으로 처리하는 서버를 Iterative서버라고 한다.

 

echo 서버/클라이언트의 구현

에코 서버 : 클라이언트가 전송해 주는 데이터를 그대로 되돌려 전송해 주는 기능의 서버

특징 : 클라이언트가 서버로부터 몇바이트의 데이터를 수신할 것인지 예상 가능하다는 점.

 


 

 

'C#' 카테고리의 다른 글

계산기 프로젝트  (0) 2019.01.03
Comments