C#

C#/네트워크 관련

스스로 네트워크 프로그래밍 #5 - SendBuffer

SendBuffer는 어떤 데이터들을 감싸서 보내기 위해 필요한 듯. 특히나 패킷 형태로 보내기 위해서는 바이트 배열에 입력하고 자르고 해야하니까.. RecvBuffer와 SendBuffer의 다른점?: RecvBuffer의 경우 Session 내부에 존재하여 들어오는 데이터들이 제대로 된 형태로 들어왔는지 확인하고 처리하는 역할임.(Session과 RecvBuffer가 1대1 관계) 그러나 SendBuffer의 경우 Session 내부에 존재하지 않고 외부에 존재하여 Send() 함수를 호출하기 전 SendBuffer에 데이터를 입력하여 추출하고 보내는 형태를 취해야 함. 그렇다면 왜 SendBuffer는 내부에 존재하면 안되는가?: 복사횟수가 늘어나면서 성능적 이슈가 발생할 수 있음(약 100명한테 ..

C#/네트워크 관련

스스로 네트워크 프로그래밍 #5 - ReceiveBuffer

RecvBuffer의 필요성: TCP의 특성으로 데이터를 스트림 형태(데이터가 이어짐)로 전송하는데, 이러한 특성 때문에 보낸 데이터가 무조건 보낸 만큼 도착함이 보장되지 않음. 즉, 데이터 '일부'만 도착 가능(100bytes를 보냈다고 해도 무조건 100 bytes가 오지 않음) 때문에 데이터가 '일부'만 도착하게 되는 경우 바로 처리가 불가능함. 소켓 네트워크에서는 대부분의 데이터를 패킷 형태(헤더(패킷의 대한 정보), 실 데이터)로 보내기 때문에 일부만 도착한다면 그 데이터를 제대로 읽어낼 수 없음. 따라서, 일부만 도착한 경우 바로 처리가 불가능하니 버퍼에다가 보관만하고 나중에 나머지가 도착한 경우 처리하는 로직이 필요함. 즉, RecvBuffer가 필요! class RecvBuffer{ Arr..

C#/네트워크 관련

스스로 네트워크 프로그래밍 #4 - 비동기 Send

class Session{ Object _lock; Socket _serverSocket; // recv는 그냥 열고 기다리는건데 send는 어느때나 불려져 올 수 있음 // 근데 걔네들이 args를 매개변수로 넘겨서 send를 하는 경우는 없으니까 // 이렇게 전역변수로 관리하는게 맞는듯? SocketAsyncEventArgs _sendArgs; int _disconnected = 0; public void OnConnected(EndPoint endPoint) { Console.WriteLine($"Connected : {endPoint}"); } public void OnDisconnectd() { } public void OnRec..

tmd1
'C#' 카테고리의 글 목록 (3 Page)