연결이 되었다가 바로 끊어지는 소캣프로그래밍으로 구현을 해보도록 했다.

 

1. TCP server 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include<stdio.h>
#include<WinSock.h>
#pragma comment(lib, "ws2_32.lib")
 
 
int main()
{
    WSADATA wsaDate;
    SOCKET hServ, hClnt;//소캣을 가르키는 핸들(숫자, 구문자)
 
    WSAStartup(MAKEWORD(22), &wsaDate);//소캣 라이브러리 장착
                                         //소캣 생성
    hServ = socket(PF_INET, SOCK_STREAM, 0); // TCP를 사용하는 소캣생성
                                             //주소설정
    SOCKADDR_IN servAddr, clntAddr;//소캣 구조체 선언
    int clntAdrsize;
    memset(&servAddr, 0sizeof(servAddr));
    servAddr.sin_family = AF_INET;
    servAddr.sin_port = htons(9000);//빅엔디안(htons)로 바꾸어 준다.
    servAddr.sin_addr.s_addr = htonl(INADDR_ANY);
    bind(hServ, (SOCKADDR*)&servAddr, sizeof(servAddr)); // 선언된 구조체 소캣을 채운다.( 소캣 주소 할당.)
 
    listen(hServ, 5);//연결요청 대기상태. TCP의 상태를 변경
    printf("chage TCP to listening start \n");
    clntAdrsize = sizeof(clntAddr);
    printf("waiting Client conection try...\n");
    hClnt = accept(hServ, (SOCKADDR*)&clntAddr, &clntAdrsize);
 
    printf("connected to client(IP:%s, port : %d) \n", inet_ntoa(clntAddr.sin_addr), ntohs(clntAddr.sin_port));
 
    //어떠한 클라이언트와 연결 성공
    //그 클라이언트와 데이터 송.수신...
 
    closesocket(hServ);
 
    WSACleanup();
 
    return 0;
}
cs

 

2.TCP Client 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include<stdio.h>
#include<WinSock.h>
#pragma comment(lib,"ws2_32.lib")
 
int main()
{
    WSADATA wsaData;
    SOCKET hClnt;
    SOCKADDR_IN servAddr;
    WSAStartup(MAKEWORD(22), &wsaData);
 
    //1.소캣 생성 - TCP설정
    hClnt = socket(PF_INET, SOCK_STREAM, 0);
 
    //2. 서버의 주소설정 ip,port
    memset(&servAddr, 0sizeof(servAddr));
    servAddr.sin_family = AF_INET;
    servAddr.sin_port = htons(9000);
    servAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
 
    //3.서버로 TCP연결 요청
    connect(hClnt, (SOCKADDR*)&servAddr, sizeof(servAddr));
    printf("conected to server... \n");
 
    //4.연결성공
 
    //6.연결해제
    closesocket(hClnt);
    WSACleanup();
 
 
    return 0;
}
 
cs

 

이러하여 결과는 이렇듯 연결이 되어서 바로 끊어진것을 알 수 가 있었다.

 

'programing > 네트워크 programing' 카테고리의 다른 글

TCP기반 서버 및 클라이언트(1)  (0) 2017.03.24
데이터 전송 특성  (0) 2017.03.21
소캣의 이해  (0) 2017.03.21

TCP / IP프로토콜 스택이란?

 - 인터넷 기반의 데이터 송수신을 목적으로 설계된 스택

 - 큰 문제를 작게 나눠서 계층화 한 결과

 - 데이터 송수신의 과정을 네개의 영역으로 계층화 한 결과

 - 각 스택 별 영역을 전문화 하고 표준화 함.

 - OSI 7계층으로 세분화 되어 있으며, 4계층으로도 표현함.

 

LINK & IP계층

LINK 계층의 기능 및 역활

 - 물리적인 영역의 표준화 결과

 - LAN, WAN, MAN과 같은 물리적인 네트워크 표준 관련 프로토콜이 정의된 영역

 - 아래의 그림과 같은 물리적인 연결의 표준이 됨.

 

IP계층의 기능 및 역활

 - IP는 Internet Protocol을 의미.

 - 경로의 설정과 관련이 있는 프로토콜

 

TCP / UDP계층

TCP /  UDP 계층의 기능 및 역활

- 실제 데이터의 송수신과 관련있는 계층

 - TCP는 데이터의 전송을 보장하는 프로토콜(신뢰성 있는 프로토콜) / UDP는 보장하지 않는 프로토콜

 

 

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

bind함수까지 호출이 되면 주소가 할당된 소캣을 얻게된다. listen함수의 호출을 통해서 연결요청이 가능한 상태가 되어야한다.

 

 

 

'programing > 네트워크 programing' 카테고리의 다른 글

TCP기반 서버 및 클라이언트(2)  (0) 2017.03.28
데이터 전송 특성  (0) 2017.03.21
소캣의 이해  (0) 2017.03.21

1. 프로토콜 이란?

 - 개념적으로 약속의 의미를 담고 있음.

 - 컴퓨터 상호간의 데이터 송수신에 필요한 통신규약.

 - 소캣을 생성할 떄 기본적인 프로토콜을 지정해야 함.

 

2. 프로토콜의 체계

 - 프로토콜도 그종류에 따라서 부류가 나뉜다. 그 부류를 가르켜서 프로토콜 체계 라함.

 - 프로토콜의 체계 PF_INIT는 IPv4 인터넷 프로토콜체계를 의미.

3. 소캣의 타입

 - 데이터 전송방식을 의미.

 - 소켓이 생성될 떄 소캣의 타입도 결정되어야 한다.

 

* 프로토콜 체계 PF_INIT의 대표적인 소캣타입

 - 연결지향형 소캣 타입

 - 비 연결지향형 소캣 타입

 

연결지향형 소캣 데이터전송

- 전송에 데이터가 소멸되지 않음.

 - 전송 순서대로 데이터가 수신

 - 데이터의 경계가 존재 하지 않음.

 - 소켓 대 소켓의 연결은 반드시 1대 1의 구조

 

비연결지향형 소켓 데이터 전송

 - 전송 순서 상관없이 빠른속도로 전송을 지향.

 - 데이터 손실 및 파손의 우려

 - 데이터의 경계가 존재

 - 한번에 전송할 수 있는 데이터의 크기가 제한.

'programing > 네트워크 programing' 카테고리의 다른 글

TCP기반 서버 및 클라이언트(2)  (0) 2017.03.28
TCP기반 서버 및 클라이언트(1)  (0) 2017.03.24
소캣의 이해  (0) 2017.03.21

1. 네트워크 프로그래밍이란?

 - 소캣이라는 것을 기반으로 프로그래밍을 하기 때문에 소캣 프로그래밍이라고 함.

 - 네트워크로 연결된 둘 이상의 컴퓨터 사이에서의 송수신 프로그램의 작성을 의미.

 

2. 소캣에 대한 간단한 이해

 - 네트워크의 연결도구.

 - 운영체제에 의해 제공이 되는 소프트웨어적인 장치

 - 소캣은 프로그래머에게 데이터 송수신에 대한 물리적, 소프트웨어적 세계한 내용을 신경쓰지 않게 함.

 

3. 연결요청을 허용하는 소켓의 생성과정

 - 1단계 : 소캣의 생성 (socket 함수 호출)

 - 2단계 : IP와 PORT번호의 (할당 bind()함수 호출)

 - 3단계 : 연결요청 가능상태로 변경 (listen()함수 호출)

 - 4단계 : 연결요청에 대한 수락 (accept()함수 호출) 

'programing > 네트워크 programing' 카테고리의 다른 글

TCP기반 서버 및 클라이언트(2)  (0) 2017.03.28
TCP기반 서버 및 클라이언트(1)  (0) 2017.03.24
데이터 전송 특성  (0) 2017.03.21

+ Recent posts

티스토리 친구하기