네트워크 - 해당되는 글 20건


유디피 소켓은 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




소켓 프로그래밍도 마찬가지로 클로우즈를 이용해서 소켓을 닫는다.
파일을 열고 파일을 입출력한다음에 클로우즈로 파일을 닫는다.
리시브 센드등의 함수를 이용해서 데이타를 전송하거나 수신한 다음에 클로우즈를 통해서 파일을 닫는다.

통신을 하기위해서
전화기 구입 ,   ->소켓생성
전화번호 할당, ->아이피주소할당
케이블에 연결, ->연결요청 대기 상태
수화기를 든다, ->연결수락                세션형성 데이타 주고받고 상태

전화걸려고하는데 필요한것은 전화기가 필요하다 (소켓의 생성을 요구한다)
#include <sys/types.h>
#include <sys/socket.h>
int socket (int domain, int type, int protocol)

전화번호를 요구, 아이피 주소랑 포트 번호
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr *myaddr, int addrlen)
클라이언트는 바인딩을 해줄피요가 자기가 접속할 포트번호랑 주소만알면되지 포트를 열지 않아도된다.

전화기를 꼽고 전화가 오기를 기다리는거(연결요청대기 상태로의 진입)
#include <sys/socket.h>
int listen(int sockfd, int backlog)


전화가 와서 수락상태 (억셉트를 호출) 
#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, int *addrlen)

전화를 걸고 싶은데 무엇이 필요합니까?
소켓의 생성
#include <sys/socket.h>
int connect(int sockfd, struct sockaddr *serv_addr, int addrlen)


 

      네트워크  |  2007. 10. 23. 11:45



sokoban's Blog is powered by Daum & Tattertools