기본 콘텐츠로 건너뛰기

라벨이 서버인 게시물 표시

TCP/IP소켓 프로그래밍 데이터 읽고 쓰기 - rade/write, 연결종료 - close

서로 소켓이 만들어 생성되고 연결을 했다면 데이터를 읽고 써야 통신이 될것이다. 이때 데이터를 읽을떄는 read함수를 쓸떄는 write함수를 이용하게 된다.. 우선 read함수부터.... read함수를 이용해서 데이터를 읽게 된다. read함수의 원형을 보면.... 1 2 #include   < unistd.h > ssize_t read( int  fd,  void   * buf, size_t count); cs 매개변수 fd : 열린파일의 지정번호이다. 소켓프로그래밍에서는 소켓 지정 번호가 된다. 클라이언트에서는 socket 함수로 생성된 소켓이고,      서버프로그램에서는 accept함수로 생성된 소켓 번호이다. buf : 읽어들인 데이터가 저장될 버퍼 변수이다. count : 읽어들일 데이터의 크기가 된다. 반환값은 성공시 데이터의 크기를반환하고, 실패시 -1을 반환한다. 예제코드 fd에서 count만큼 크기를읽어 buf에다가 저장을 하게된다. 1 2 3 4 int  readn; char  buf[ 80 ]; memset(buf,  0x00 ,  80 ); readn  =  read(sockfd, buf,  80 ); cs sockfd로부터 80만큼의 크기를 읽어서 buf에다가 저장. ==================================== 이제 write 함수를 이용하여 데이터를 서보자. 함수의 원형을 살펴보면 1 2 #include   < unistd.h > ssize_t write( int  fd,  const   void   * buf, sizr_t count); cs 매개변수 fd : 연결된 소켓 지정 번호 buf : 보낼데이터가 저장되어 있는 버퍼 count : 보낼 데이터의 크기 반

TCP/IP소켓 프로그래밍 socket-소캣생성, bind-소캣 정의 listen수신 대기열 생성 accept 연결 기다리기

소켓 생성(socket) - 듣기소켓이라고 함.. 소켓 정의(bind) - ip주소, port번호를 할당해줄수 있다 대기열 생성(listen) - 만약 어떠한 클라이언트가 서버를 사용하고 있다면 또 다른 클라이언트는 종료가 되겠지만 대기열이 있다면 대기열에서 기다림 연결수락(accept) - 대기열에 클라이언트가 있다면 크 클라이언트와의 연결을 허용한다. 데이터 통신 (read. write) 소켓 종료(close) 우선 서버의 흐름은 이렇게 된다. 클라이언트보다 좀더 복잡한 구성을 가지고 있다.  1. 소켓생성 소켓을 생성하기에앞서 헤더파일을 선언해준다. 1 2 #include   < sys / types.h > #include   < sys / socket.h > cs 헤더를 선언해준다. 함수의 원형은 1 int  socket( int  domain,  int  type,  int  protocol); cs 이된다 이 부분은 헤더 내부에 이미 선언이 되었다. 각매개변수는  nt domain  어떤 영역에서 통신할래? AF_UNIX : 시스템 내부 영역에서 프로세스와 프로세스간 통신 AF_INET : 물리적으로 서로 멀리 떨어진 컴퓨터 사이 통신 일반적으로 IPv4를 이용 int type 어떤 프로토콜 사용할래? SOCK_STREAM : tcp/ip 사용 SOCK_DGRAM : UDP사용 SOCKRWA : TCP/IP의 복잡함 감춤.... 먼솔.... 21장에 나온단다.... int protocol 도메인과 유형에 따라 사용할 프로토콜 결정 IPPROTO_TCP : AF_INET과 SOCK_STREAM 유형과 함께 사용 IPPROTO_UDP : AF_UNIX와 SOCK_DGRAM 유형과 함께 사용 socket 함수는 int 값 반환한다. -1이면 실패, 0이