분류 전체보기 (232) 썸네일형 리스트형 [C#] 비동기 프로그래밍_프로세스, 스레드 프로세스 : 메모리에 적재된 현재 실행중인 프로그램 스레드 : 프로세스 내에서 명령들의 실행 흐름 단위 public static void Run() { Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("192.168.31.1"), 17841); serverSocket.Bind(endPoint); serverSocket.Listen(1000); while (true) { Socket clientSocket = serverSocket.Accept(); Console.WriteLine(cl.. [C#] Nagle 알고리즘 네트워크 상의 패킷 수를 줄임으로써 네트워크 효율성을 높이는 알고리즘 1byte를 보낸다 해도 실제로는 여러 header 정보가 추가되어 수십 바이트를 보내게 된다. 그러므로 1byte를 여러 번 보내는 것 보다 한번에 여러 byte를 보내는 것이 효율적 상대방으로부터 ack를 받고 데이터를 전송 패킷이 줄어들기 때문에 네트워크 효율이 증가하지만 ack를 대기해야 하므로 전송속도가 느리다. [C#] SO_LINGER Close 함수 호출 시 출력버퍼에 전송되지 않고 남아 있는 데이터를 어떻게 처리할 지 알려주는 옵션. 기본동작은 출력버퍼에 남아있는 데이터는 모두 전송을 하고 fin packet을 보낸다. socket.LingerState = new LingerOption(false, 0); 첫번째 인자는 사용여부. true를 줄 경우 남아있는 데이터를 버리고 상대방에게 비정상 종료를 날린다. 두번째 인자에 설정한 시간 내로 FIN에 대한 ACK를 받지 못하면 비정상 종료 [자료구조] 배열(Array) 배열이란? 배열은 연속적인 메모리 상에 동일한 데이터 타입의 요소들을 순차적으로 일렬로 저장하는 자료구조. 순차적으로 나열된 배열요소는 각 요소마다 인덱스가 붙는다. ex) x[0], x[1].... 배열의 크기는 고정적이다. 배열 인덱스를 사용할 경우 배열요소에 즉시 엑세스할 수 있다. 배열의 차원(Dimension) 한 배열요소를 선택하기 위해 사용하는 인덱스의 수 C#은 32차원 배열까지 지원한다. 가변 배열(Jagged Array) 배열의 요소가 배열타입인 경우 ex) x[0] = new int[2]; x[1] = new int[6]{1, 2, 3, 4, 5, 6}; x[2] = new int[3]{9, 8, 7}; 동적 배열 (Dynamic Array) 정적 배열은 초기화 시 지정한 고정크기를 .. [자료구조] 자료구조(Data Structure)의 정의 자료구조 (Data Structure) 데이터를 효율적으로 접근하고 조작할 수 있도록 데이터의 구조를 만든 것 자료구조마다 장단점이 있기 때문에 자신의 목적에 맞는 자료구조를 선택해야 한다. 잘 설계된 자료구조를 사용하면 시간과 메모리를 효율적으로 사용할 수 있다. 추상자료형 (ADT) 알고리즘이 문제를 해결하는데 필요한 자료의 형태와 그 자료를 사용한 연산들을 수학적으로 정의한 모델 추상자료형과 자료구조의 차이 추상자료형은 무엇이 구현되어야 하는지 자료의 논리적 형태를 정의 자료구조는 어떻게 구현할 지를 파악해서 물리적 형태로 구현하는 것 예를 들어 스택(Stack)은 추상 자료형으로 마지막에 입력된 데이터가 먼저 사용된다. 스택은 자료구조 구현 측면에서 배열로도 구현할 수 있고, 연결 리스트 형태로 .. [C#] TCP/IP 소켓 프로그래밍_우아한 종료 우아한 종료 4 way handshake 과정을 거쳐 종료하는 것을 우아한 종료라 한다. public void Shutdown(SocketShutdown how) 각 호스트 별로 입/출력 스트림이 형성. 이러한 입/출력 스트림을 끊어서 send나 receive 함수를 호출 못하게 하는 함수 SocketShutdown.Receive : 입력버퍼의 내용을 전부 삭제하고 입력 스트림을 끊는다. SocketShutdown..Send : 출력버퍼의 데이터를 전송한 후 출력 스트림을 끊는다. SocketShutdown.Both : Receive와 Send 두 가지를 동시에 한다. Both와 Send 는 fin 패킷을 보내면서 4way handshke 과정을 유도 Receive는 fin 패킷을 보내지 않는다. pub.. [C#] TCP/IP 소켓 프로그래밍_Half-close Half-close 서버가 자원을 전부 전송하면 클라이언트에서 데이터를 수신했다고 전송하는 메시지를 보낸다고 가정하자. 클라이언트가 메시지를 전송하더라도 서버가 close 함수를 사용하면 메시지를 받을 수 없는 상황이 된다. 이 때 close()가 아닌 Shutdown.Send 함수를 사용해서 출력 스트림만 닫고 입력 스트림을 열어놓게 되면 클라이언트의 메시지를 수신할 수 있게 된다. 이처럼 스트림 중 절반만 닫는 것을 Half-close라 한다. [C#] TCP/IP 소켓 프로그래밍_우아한종료 우아한종료 비정상적인 종료가 아닌 4way handshake 방식을 거쳐 종료되는 방식을 우아한 종료라 한다. 우아한종료 함수 public void Shutdown(SocketShutdown how) 두 호스트 간에 소켓이 연결되면 각 호스트 별로 입출력 스트림이 형성된다. 입출력 스트림을 끊어서 send 나 receive 함수를 호출 못하게 하는 함수 - SocketShutdown.Receive : 입력버퍼의 내용을 삭제하고 입력 스트림을 끊는다. - SocketShutdown.Send: 출력버퍼의 내용을 전송한 후 출력 스트림을 끊는다. - SocketShutdown.Both: receive와 send 함수를 동시에 실행하는 것과 같은 역할 public void Close() public void D.. 이전 1 ··· 23 24 25 26 27 28 29 다음