2009. 8. 5. 00:14ㆍ언어/TCP-IP
프로토콜 -> 두 사람이 데이터를 주고 받는 약속 (컴퓨터 상호간의 대화에 필요한 통신규약)
프로토콜은 장 정의 되어야 한다.
소켓의 생성 -> 소켓 : 기본적인 통신의 도구(두 개 이상의 호스트를 연결해주는 장치)
Int socket(int domain, int type, int protocol);
첫 번째 인자 : 프로토콜 체계
PF_INET | IPv4 인터넷 프로토콜 |
PF_INET6 | IPv6 인터넷 프로토콜 |
PF_LOCAL | Local 통신을 위한 UNIX 프로토콜 |
PF_PACKET | Low level socket을 위한 인터페이스 |
PF_IPX | IPX 노벨 프로토콜 |
두 번째 인자 : 데이터 전송 타입
-> 연결 지향형 : TCP 소켓 =>SOCK_STREAM
특징
- 에러나 데이터의 손실 없이 무사히 전달된다.
- 전송하는 순서대로 데이터가 전달된다.
- 전송되는 데이터의 경계(Boundary)가 존재하지 않는다.
-> 비 연결 지향형 : UDP 소켓 => SOCK_DGRAM
특징
- 전송되는 순서에 상관없이 가장 바른 전송을 지향한다.
- 전송되는 데이터는 손실될 수 있고 에러가 발생할 수도 있다.
- 전송되는 데이터의 경계(Boundary)가 존재한다.
- 한번에 전송되는 데이터의 크기는 제한된다.
세 번째 인자 : 호스트간에 통신을 하는데 있어서 특정 프로토콜을 지정하기 위해 사용(LOW-SOCKET)
예제.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
void ErrorHandling(char *message);
int main(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hTCPSock;
SOCKET hUDPSock;
if(WSAStartup(MAKEWORD(2, 2), &wsaData)!=0)
ErrorHandling("WSAStartupp() error!");
/*연결지향TCP 소켓생성*/
hTCPSock=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
if(hTCPSock == INVALID_SOCKET)
ErrorHandling("socket() error");
/*비연결지향UDP 소켓생성*/
hUDPSock=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(hUDPSock == INVALID_SOCKET)
ErrorHandling("socket() error");
printf("생성된TCP 소켓의핸들: %d\n", hTCPSock);
printf("생성된UDP 소켓의핸들: %d\n", hUDPSock);
closesocket(hTCPSock);
closesocket(hUDPSock);
WSACleanup();
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
'언어 > TCP-IP' 카테고리의 다른 글
TCP 기반 서버/클라이언트 (0) | 2009.08.06 |
---|---|
주소체계와 데이터 정렬 (0) | 2009.08.05 |
네트워크 기초 (0) | 2009.07.31 |