개인 공부/네트워크 (15) 썸네일형 리스트형 네트워크P-014 (소켓 옵션 & Broadcast) 소켓 옵션 & 브로드캐스트 소켓 옵션 : 소켓 함수의 기본 동작을 변경 -> 소켓 코드와 프로토콜 구현 코드를 세부적으로 제어 소켓 옵션의 종류 (1) 소켓 코드가 처리하는 옵션(프로토콜에 독립적) - 옵션을 설정하면 소켓 코드에서 해석하고 처리한다 (2) 프로토콜 구현 코드가 처리하는 옵션(프로토 콜에 의존적) - 옵션을 설정하면 프로토콜 구현 코드에서 해석하고 처리한다 소켓 옵션 함수 // ===== Windows ===== #include int setsockopt( SOCKET sock, int level, int optname, const char* optval, int optlen ); // 성공 : 0 // 실패 : SOCKET_ERROR // ===== Linux ===== #include.. 네트워크P-013 (UDP Server&Client) TCP& UDP 포트 번호를 이용해 주소를 지정한다 응용 프로그램이 TCP나 UDP를 이용해 통신하려면 반드시 포트 번호를 결정해야한다 데이터 오류를 체크한다 IP와 달리 TCP와 UDP 데이터에 대한 오류를 체크한다 TCP UDP 프로토콜 연결형 프로토콜 세션을 성립 후 통신 비연결형 프로토콜 세션을 성립하지 않고 통신 신뢰성 신뢰성이 있는 데이터 전송 드랍시 데이터 재전송 신뢰성이 없는 데이터 전송 드랍시 데이터 재전송하지 않음 기본 통신 1 : 1 통신 1: 1 통신 1: N 통신 데이터 경계 데이터 경계 구분 바이트 스트림 서비스 데이터 경계 구분을 하지 않음 데이터그램 서비스 UDP(User Datagram Protocol) 연결(세션) 설정을 하지 않으므로 connect() 함수 불필요 프로토.. 네트워크P-012(스레드 동기화 - 이벤트) 스레드 동기화 이벤트(Event) - 이벤트 객체를 활용하여 WatiForSingleObject(), WaitForMultipleObject() 등의 함수에 신호 상태를 리턴 받아 처리하기 위해 사용한다 - 사건 발생을 다른 스레드에게 알려 대기중인 스레드 중 하나를 깨워서 작업을 한다 이벤트를 사용하는 절차 1) 이벤트를 비 신호 상태로 생성한다 2) 한 스레드가 작업을 진행하고, 나머지 스레드는 이벤트에 대해 WaitFor~() 함수를 호출해서 이벤트가 신호 상태가 될 때까지 대기한다 3) 스레드가 작업을 완료하면 이벤트를 신호 상태로 변경한다 4) 대기중 이던 스레드 중 한개 또는 전부 깨어나서 작업을 진행한다 이벤트 상태 변경 함수 신호 상태 : 스레드가 종료되는 상태 비신호 상태 : 스레드가 실.. 네트워크P-011(멀티 스레드 TCP 서버 & 임계영역) 멀티 스레드 TCP 서버 구현 멀티 스레드를 이용해 여러 클라이언트를 동시에 처리할 수 있는 TCP 서버 [1] 클라이언트가 접속하면 accept()함수를 클라이언트와 통신할 수 있는 소켓을 리턴 [2] 클라이언트와 통신을 담당할 스레드를 생성한다 -> 이때 스레드 함수에 소켓을 넘겨준다 기본 TCPServer.cpp의 코드를 수정해서 작성!! // 클라이언트들과 데이터 통신!! DWORD WINAPI ProcessClient(LPVOID arg) { SOCKET clientSocket = (SOCKET)arg; int retval; struct sockaddr_in clientaddr; char addr[INET_ADDRSTRLEN]; int addrlen; char buf[BUFSIZE + 1]; a.. 네트워크P-010(스레드 기다리기 & 재실행) 스레드 제어 스레드는 윈도우 운영체제의 실행 단위므로, 우선 순위를 변경하거나 실행을 중지하고 재시작하는 등의 제어기능을 윈도우 API에서 지원해준다 스레드 우선 순위 변경 각 스레드에 CPU 시간을 적절히 분배하기 위한 정책!! 스레드 스케줄링 OR CPU스케줄링 --> 우선 순위가 높은 것을 우선적으로 할당한다! 스레드 우선 순위를 결정하는 요소 프로세스 우선 순위 (우선 순위 클래스) : 프로세스 속성으로, 같은 프로세스가 생성한 스레드는 우선순위 클래스가 모두 같다!!! 스레드 우선 순위 (우선 순위 레벨) : 스레드 속성으로, 같은 프로세스에 속한 스레드 간 상대적인 우선 순위를 결정할 때 사용한다 우선 순위 클래스 REALTIME_PRIORITY_CLASS(실시간) HIGH_PRIORITY_C.. 네트워크P-009 (스레드 생성 & 종료) 스레드 생성 API CreateThread() 함수 스레드 생성 후 스레드 핸들을 리턴 OS의 스레드 관련 데이터 구조체를 간접적으로 참조하는 매개체 역할을 한다 #include HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,// 스레드 보안 특성 -> 보안을 위해 디폴트 NULL SIZE_T dwStackSize,// 스레드에 할당되는 스택 크기 LPTHREAD_START_ROUTINE lpStartAddress,// 스레드 함수 호출 LPVOID lpParameter,// 스레드 함수에 전달할 매개변수(인자) DWORD dwCreationFlags, // 스레드 제어하는 플래그 LPDWORD lpThreadId// 스레드의 ID 값 );.. 네트워크P-008(스레드 & [이전 실습] 파일 전송) 멀티 스레드 TCP 서버 - 클라이언트의 문제점 [1] 동시에 둘 이상의 클라이언트 서비스가 불가능하다 첫번째로 접속한 클라이언트가 보낸 메시지는 서버 화면에 정상적으로 표시 그 다음으로 접속한 클라이언트가 보낸 메시지들은 표시되지 않는다 [1-1] 해결책 : 서버가 각 클라이언트와 통신하는 시간을 짧게 줄인다 장점 : 구현이 쉽다, 서버의 시스템 자원을 가장 적게 사용한다 단점 : 각 클라이언트의 처리 지연 시간이 길어질 수 있다 --> 처리 효율이 떨어진다 [1-2] 해결책 : 각 클라이언트를 스레드를 이용해서 독립적으로 처리한다 장점 : 스레드 생성 함수와 동기화를 이용한다 단점 : 서버의 시스템 자원을 가장 많이 사용한다 --> 접속한 클라이언트 수와 비례하게 스레드 생성!! [2] 서버와 클라이.. 네트워크P-008 (두 데이터 합 & 1:1 간단한 TCP 채팅 ) TCP 두 수 합 구하는 프로그램 작성 클라이언트에게 두 정수를 입력 받아서 서버가 데이터를 연산하여 보내준다 #include "Common.h" #define SERVERPORT 9000 #define SIZE 512 int main() { int retval; // ===== 윈속 초기화 ===== WSADATA wsa; if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)return 1; // ===== 소켓 생성 ===== SOCKET listenSocket = socket(AF_INET, SOCK_STREAM, 0);// IPv4, TCP 통신 소켓 if (listenSocket == INVALID_SOCKET)printf("Socket ERROR!!!\n"); // ==.. 이전 1 2 다음