프로토콜
대화에 필요한 통신규약
프로토콜은 약속이다.
소켓 생성함수
#include <sys/socket.h>
int socket(int domain, int type, int protocol);
->성공시 파일 디스크립터, 실패시 -1 반환
domain 소켓이 사용할 프로토콜 체계 정보전달
type 소켓의 데이터 전송방식에 대한 정보 전달
protocol 두 컴퓨터간 통신에 사용되는 프로토콜 전달
첫번째 인자
프로토콜의 체계 종류
- PF_INET IPV4 인터넷 프로토콜 체계
- PF_INET6 IPV6 인터넷 프로토콜 체계
- PF_LOCAL 로컬 통신을 위한 UNIX 프로토콜 체계
- PF_PACKET Low Level 소켓을 위한 프로토콜 체계
- 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);
}
Trackback 0 And
Comment 0


