유디피 소켓은 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)클라이언트에다가 써준다
      네트워크  |  2007. 10. 24. 10:29



sokoban's Blog is powered by Daum & Tattertools