프로토콜

|

프로토콜

대화에 필요한 통신규약
프로토콜은 약속이다.

소켓 생성함수

#include <sys/socket.h>
int socket(int domain, int type, int protocol);
->성공시 파일 디스크립터, 실패시 -1 반환

domain 소켓이 사용할 프로토콜 체계 정보전달
type 소켓의 데이터 전송방식에 대한 정보 전달
protocol 두 컴퓨터간 통신에 사용되는 프로토콜 전달

첫번째 인자 
프로토콜의 체계 종류
  1. PF_INET           IPV4 인터넷 프로토콜 체계
  2. PF_INET6         IPV6 인터넷 프로토콜 체계
  3. PF_LOCAL       로컬 통신을 위한 UNIX 프로토콜 체계
  4. PF_PACKET     Low Level 소켓을 위한 프로토콜 체계
  5. PF_IPX              IPX 노벨 프로토콜 체계

1번만 알면 됨
나머지는 잘 사용 안됨

두번째 인자
소켓의 데이터 전송방식
 PF_INET에는 둘이상 전송방식이 있음
대표적 두가지 전송 타입
-연결 지향형 소켓타입(SOCK_STREAM) TCP
-비연결 지향형 소켓 타입(SOCK_DGRAM) UDP


tcp 특성 예제



#include <stdio.h>
#include <stdlib.h>
#include <WinSock2.h>
void ErrorHandling(char * message);

int main(int argc, char * argv[])
{
WSADATA wsaData;
SOCKET hSocket;
SOCKADDR_IN servAddr;

char message[30];
int strLen = 0;
int idx=0, readLen=0;

if(argc != 3)
{
printf("Usage : %s <IP> <port>\n",argv[0]);
exit(0);
}

if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
{
ErrorHandling("WSAStartup() error!");
}

hSocket = socket(PF_INET, SOCK_STREAM, 0);
if(hSocket == INVALID_SOCKET)
{
ErrorHandling("socket() error!");
}

memset(&servAddr, 0, sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(argv[1]); //ip
servAddr.sin_port = htons(atoi(argv[2])); //port

if(connect(hSocket, (SOCKADDR *)&servAddr,sizeof(servAddr)) == SOCKET_ERROR)
{
ErrorHandling("connect() error!");
}
while(readLen=recv(hSocket, &message[idx++], 1, 0))
{
if(readLen==-1)
{
ErrorHandling("read() error!");
}

strLen += readLen;
}

printf("Message from server : %s \n", message);
printf("Function read call count :%d \n", strLen);
closesocket(hSocket);
WSACleanup();

return 0;
}

void ErrorHandling(char * message)
{
fputs(message,stderr);
fputc('\n', stderr);
exit(1);
}


'웹관련' 카테고리의 다른 글

br 태그.  (0) 2014.12.23
주소체계와 데이터 정렬  (0) 2013.12.31
프로토콜  (0) 2013.12.31
윈도우 소켓  (0) 2013.12.31
소켓  (0) 2013.12.31
Trackback 0 And Comment 0