본문 바로가기

공부/tcp/ip 프로그래밍

11장 프로세스간 통신 IPC(interprocessor communication) 파이프 = 프로세스간에 서로 메모리참조 불가능 OS가 공유하여 통신할 수 있는 메모리(pipe)를 할당해 줌 파이프함수 #include int pipe(int filedes[2]); 성공시 0, 실패시 -1 반환 filedes[0] : 파이프로부터 데이터를 수신하는데 사용되는 파일 디스크립터가 저장 filedes[1] : 파이프로부터 데이터를 전송하는데 사용되는 파일 디스크립터가 저장 더보기
10장 멀티프로세스 기반의 서버구현 프로세스 = 메모리 공간을 차지한 상태에서 실행중인 프로그램 프로세스는 프로세스간에 코드영역, 데이터 영역, 힙 영역, 스택 영역을 공유하지 않고 각자 가지고 있음 코드영역: 프로그램의 실제 코드가 저장되어 있는 영역 스택영역 : 로컬변수, 함수에 호출에 관련된 정보, 임시데이터가 저장되는 영역 힙영역 : 동적 메모리 할당에 사용되는 영역 데이터영역 : 전역변수등의 데이터가 저장되는 영역 프로세스(자세히) = OS는 가상메모리를 이용하여 프로그램을 관리 %참고 c언어 상에서 사용하는 메모리는 가상메모리(register + cach + 램 + 하드디스크) 다중접속 서버의 구현방법들 멀티프로세스 기반 서버 = 다수의 프로세스를 생성하는 방식으로 서비스 제공 멀티플렉싱 기반 서버 = 입출력 대상을 묶어서 관리.. 더보기
9장 소켓의 다양한 옵션 소켓의 다양한 옵션 protocol level option name 설명 get set SOL_SOCKET SO_SNDBUF 출력버퍼의 크기 O O SO_RCVBUF 입력버퍼의 크기 O O SO_REUSEADDR TIME-WAIT 상태에서도 포트에 대한 소켓을 강제해제하여 소켓을 할당 가능하도록 함 O O SO_KEEPALIVE O O SO_BROADCAST O O SO_DONTROUTE O O SO_OOBINLINE O O SO_ERROR O X SO_TYPE O X IPPROTO_IP IP_TOS O O IP_TTL O O IP_MULTICAST_TTL O O IP_MULTICAST_LOOP O O IP_NULTICAST_IF O O IPPROTO_TCP TCP_KEEPALIVE O O TCP_NOD.. 더보기
8장 도메인 이름과 인터넷 주소 도메인 ip DNS 서버 도메인 이름 ip에 대한 정보 얻음 ip나 도메인을 이용해서 hostent구조체를 얻어옴 struct hostent { char* h_name; //official name char** h_aliases; //alias list int h_addrtype; //host address type int h_length; //address length char* h_addr_list;//address list } 리눅스 도메인 이름을 이용해서 ip주소 얻어오기 #include struct hostent* gethostbyname(const char* hostname); 성공시 hostent 구조체 변수의 주소 값, 실패시 null 포인터 반환 ip주소를 이용해서 도메인 정보 얻어오기 .. 더보기
7장 소켓의 우아한 연결종료 close(), closesocket()는 송수신스트림 둘다를 끊어버림 하나의 스트림만을 끊기 위한 함수 리눅스 #include int shutdown(int sock, int howto); 성공시 0, 실패시 -1 반환 sock : 종료할 소켓의 파일 디스크립터 전달 howto : 종료방법에 대한 정보 전달 -> SHUT_RD : 입력 스트림 종료 SHUT_WR : 출력 스트림 종료 SHUT_RDWR : 입출력 스트림 종료 출력 스트림을 종료하면 상대호스트로 EOF가 전송됨 윈도우 #include int shutdown(SOCKET sock, int howto); 성공시 0, 실패시 SOCKET_ERROR반환 sock : 종료할 소켓의 핸들 howto : 종료방법에 대한 정보 전달 -> SD_RECEI.. 더보기
server-client 프로그램 간단한 서버 클라이언트 프로그램 1. 서버에서 왼쪽마우스를 클릭하여 accept함수를 구동시킴 2. 클라이언트에서 왼쪽마우스를 클릭하여 connect함수를 구동시킴 전송 결과 : 연결되고 나서 서버 -----------------------------> 클라이언트 "Hello World" 3. 클라이언트에서 오른쪽마우스를 클릭하여 화면에 문자열을 삭제 4. 다시 1~3번 과정을 반복하여 문자열을 화면에 표시 끝~~~~~~~~~~~~~~~~~~~~~ server 소스 #include #include #include void ErrorHandling(char* message); LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; LPC.. 더보기
udp, tcp 경계의 의미 udp, tcp 경계의 의미 recv()함수에 인자로 주는 최대 길이 제한이 있긴 합니다만, 보내는 쪽에서 몇 글자를 보내기로 되어 있는지 사전에 합의를 확실히 했다면야 괜찮겠지만, 저 길이보다 작은 메시지가 둘 이상 오면 합쳐질 수 있겠지요. 잠깐 해봤는데 역시 그렇습니다. 다음과 같이 세개의 메시지가 있고, char *msg[] = { "msg1", "msg2", "msg3" }; TCP 클라이언트에서 다음과 같에 연달아 세 번 보낸다고 할때, for (i=0; i 더보기