드뎌 아까 함수 알려준다

 

#include <sys/socket.h>

 

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

 나눠보자

 

domain  소켓이 사용할 프로토콜 체계(Protocol Family) 정보 전달.

type      소켓의 데이터 전송방식에 대한 정보 전달

protocol 두 컴퓨터간 통신에 사용되는 프로토콜 정보 전달.

 

한도메인에 타입이 나눠지고 그안에 프로토콜이 있다 

도메인

  L 타입

        L프로토콜

이런듯 안에 들어가있는듯 

 

 

프로토콜  종류들

 

PF_INET  ===== IPv4 인터넷 프로토콜 체계

PF_INET6 ===== IPv6 인터넷 프로토콜 체계

PF_LOCAL ===== 로컬 통신을 위한 UNIX 프로토콜 체계

PF_PACKET ===== Low Level 소켓을 위한 프로토콜 체계

PF_IPX ===== IPX 노벨 프로토콜 체계

 

 

 

 

 

PF_INET 

연결 지향형 소켓이랑 비연결 지향형 소켓이랑 2개임

1. 연결 지향형은 보냇는데 잘보내졋는지 확인도 해줌(SOCK_STREAM) 스트림 ㅇㅇ

좀느림

순서도 뒤바뀌지않음

데이터의 경개가 없음 

그니깐 난 찔끔식 주었는데  

받는에가 한번에 다 봄 

 내가 알파벳 하나씩보넴

a

p

p

l

y

근데 받는애가 짜증나서 한번에 5개 읽어냄

apply

이런듯

 

2. 비연결 지향형 ??? 걍 보내기만함?? (SOCK_DGRAM)이름도 디질래이네

걍보내니깐 빠름 안갈수도 있음 

걍 막던지니깐 순서 엉망임

데이터 없어져도 모름 보낸애도 받은줄암(확인을 안함)

순서 엉망이라 하나씩 읽어야함 뭉쳐봣자 못알아봄

내가 알파벳 하나씩 보넴

a

l

p

y

p

이러게 줘서  보낸 시간차로 정렬안하면 모름

 

크기가 제한된다 

다르게 보내면 받는애도 못알아봄

 

헤이~~

  |

  |

 V

#@$@% 이렇게 오는듯

 

 

이렇게 PF_INET 타입이 끝난듯

 

SOCK_STREAM 

이거는 IPPROTO_TCP 만 이어짐

그래서 0해도 저걸로 알아서 들어감

 

SOCK_DGRAM

이거는 IPPROTO_UDP 만 이어짐

그래서 얘도 0으로하면 알아서 들어간덴다

 

예제 다쓰자 이건 TCP 예제임

#include <"해더정보는 hello_client.c와 동일하므로 생략합니다.">
void error_handling(char *message);

int main(int argc, char* argv[])
{
	int sock;
    struct sockaddr_in serv_addr;
    char message[30];
    int str_len=0;
    int idx=0, read_len=0;
    
    if(argc!=3){
    	printf("Usage : %s <IP> <port>\n",argv[0]);
        exit(1);
	}

	sock=socket(PF_INET, SOCK_STREAM, 0);
	if(sock == -1)
    	error_handling("socket() error");
    
    memset(&serv_addr, 0, sizeof(serv_addr));
    serv_addr.sin_family=AF_INET;
    serv_addr.sin_addr.s_addr=int_addr(argv[1]);
    serv_addr.sin_port=htons(atoi(argv[1]);
    
    if(connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr))==-1)
    	error_handling("connect() error!");
    
    while(read_len=read(sock, &message[idx++], 1))
    {
    	if(read_len == -1)
        	error_handling("read() error!");
            
        str_len+=read_len;
    }
    
    printf("Message form server: %s \n", message);
    printf("Function read call count: %d \n",str_len);
    close(sock);
    return 0;
}

void error_handling(char *message)
{
	//이전 예제와 동일하므로 생략! <--- 이렇게 되있어서 가져옴 
	fputs(message, stderr);
    fputc('\n',stderr);
    exit(1);
}

다햇어!!

이건 TCP 라 계속 일어 줘야한다고한다 전에 예제 보내는 곳에서 

한줄 한줄 정성것 써서 보냇으니깐

 

그줄수만큼 TCP 에서 줄 끝날때 까지 읽어와야함 

그른스 

while 보면 id 끝날떄까지 함

 

 

블로그 이미지

Or71nH

,