드뎌 아까 함수 알려준다
#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 끝날떄까지 함