유디피 소켓은 SOCK_DGRAM 사용하고
Tcp는 SOCK_STREAM을 사용한다.
htons 호스트 바이트오더 네트워크 바이트오더. 쇼트
ntohs 네트워크바이트오더 호스트 바이트오더 쇼트
================================
소켓 주소
struct sockaddr_in {
sa_family_t sin_family; /* 주소 체계(AF_INET) */
uint16_t sin_port; /* port 정보 */
struct in_addr sin_addr; /* 32 비트 IP 주소정보 */
char sin_zero[8]; /* 사용되지 않음 */
};
구조체형식으로 넣어줄때는 데이타형식으로 바로 넣어주기 때문에 이렇게 구조체를 넣어서 바로 넣어준다.
struct in_addr {
uint32_t s_addr; /* 32비트 IP 주소정보 */
};
==================================
memset(&addr,0,sizeof(addr_len));
멤버 변수 초기화
serv_addr.sin_addr.s_addr=htonl(INADDR_ANY); 서버쪽의 주소를 채우기 위해서 INADDR_ANY 1: struct sockaddr_in addr;
2: char *serv_ip="211.217.168.13";
3: char *serv_port="9190";
4: memset(&addr, 0, sizeof(addr_len));
5: addr.sin_family = AF_INET;
6:
addr.sin_addr.s_addr = inet_addr(serv_ip);클라이언트의 주소를 채우기 위해서 serv_ip 7: addr.sin_port = htons(atoi(serv_port));
-------------------------------------------------------------------------------------------------
바인드를 사용해서 구조체의 주소랑 크기랑 넘겨준다
#include <sys/type.h>
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr * myaddr, int addrlen);
-------------------------------------------------------------------------------------------
클라이언트에서는 소켓을 하나만가지고 생성하며된다.
=====================
억셉트를 호출할때 클라이언트 값이 반환되고
연결요청 대기 큐에 있는것이 새로운 소켓이 생성이 된다.
이런 소켓을 가지고 클라이언트와 직접적으로 송수신한다.
서버와 연결이허용이 되서 억셉트함수 클라이언트랑 송수신을 한다.
clnt_addr은 억셉트했을때 클라이언트 정보 받기 위해서 설정
소켓을 생성
serv_sock 생성 여기에다가 sin_addr, sin_port
클라이언트 주소정보가 들어오는것 clnt_addr구조체에 주소정보가 온다.
write(clnt_sock)클라이언트에다가 써준다