.NET 4.x에서 'SocketAsyncEventArgs'를 쓰다가 그대로 .NET 5로 업그레이드하면 'Completed'이벤트가 오지 않는 현상이 있습니다.(참고 : github - DGSocketAssist/DGSocketAssist1/) 아래 스크린 샷은 .NET 4에서 만든 'SocketAsyncEventArgs'를 .NET 5에서 사용한 경우입니다.'SaeaSend_Completed'이벤트가 오지 않은 걸 확인할 수 있습니다. 아래 스크린 샷은 .NET 4에서 정상 작동한 경우입니다. 이것은 .NET 5부터 'ReceiveAsync', 'SendAsync'가 동기로 동작하기 때문입니다.이 포스팅은 'ReceiveAsync'을 기준으로 설명합니다.('SendAsync'도 똑같기 때문) 연관글..
'System.InvalidOperationException'에러는 이미 'SocketAsyncEventArgs'개체가 사용 중인 경우 발생합니다. 1. 원인 분석 이 라이브러리로 만든 프로그램이 몇 개인데 이런 에러가 있었다고?? 라는 생각을 하며 클라이언트의 상세 로그를 봤더니..... 강조된 로그가 3줄인데 첫 줄과 마지막 줄은 각각 다른 요청입니다. 첫 번째 줄은 주기적으로 서버에 보내는 내용이고 세 번째 줄은 사람이 직접 서버에 요청하는 내용입니다.... 우연의 결과로 밀리초까지 일치해버린것입니다!!!!!! 같은 증상으로 죽어버린 다른 클라이언트의 로그도 동일합니다. (아래 로그) 동시에 하나의 'SocketAsyncEventArgs' 개체를 사용하여 보내기(Send)를 하려고 해서 발생한 오류..
'SocketAsyncEventArgs'의 이해를 위한 글을 여러 번 썼었는데..... '.NET 5' 이후로는 'SocketAsyncEventArgs'가 이전과 살짝 다른 동작을 합니다. 그래서 '.NET 5'로 넘어가기 전에 총정리 겸 단계별 샘플을 만들었습니다. 연관글 영역 0. 구조 각 샘플은 거의 같은 구조로 되어 있습니다. 샘플 소스 : dang-gun/DGSocketAssist/ dang-gun/DGSocketAssist/DGSocketAssist1/ 라이브러리 형태로 만들어져 있어 "DGSocketAssist_Server", "DGSocketAssist_Client"만 참조하여 서버/클라이언트 프로그램을 만들 수 있습니다. 1. 'DGSocketAssist1_Server' 이해하기 'DGS..
.net에서 소켓 프로그래밍을 하려면 몇 가지 선택사항이 있는데 그중 하나가 'SocketAsyncEventArgs'입니다. 전에 '[.Net] SocketAsyncEventArgs - 큰 데이터(Large Data) 전송할 때 생기는 문제'라는 글에서 버퍼크기보다 큰 데이터가 오는 경우 어떤 일이 발생하는지 다루었습니다. (참고 - [.Net] SocketAsyncEventArgs - 큰 데이터(Large Data) 전송할때 생기는 문제 ) 그렇다면 'SocketAsyncEventArgs'를 이용하여 큰 데이터(Large Data)나 연속 메시지(Continuous Receive)에 의한 리시브데이터 뭉침 현상을 어떻게 처리해야 하는지를 알아보겠습니다. 이 포스팅의 완성된 코드는 공개프로그램에서 확인할..
다른 포스팅에서 'SocketAsyncEventArgs'를 사용하는 방법을 알아봤습니다. (참고 : [.Net] 'SocketAsyncEventArgs' 사용하기) 그런데 'SocketAsyncEventArgs'를 이용하면 이상한 현상이 있는데.... 설정된 크기 이상의 데이터를 보내면 리시브가 여러 번 오거나 데이터가 깨져서 오는 현상이 있습니다. (디폴트값이 8192byte였나 그럴 겁니다.) 이런 문제 때문에 큰 데이터(Large Data)를 보낼 수 없다는 것입니다. 그런데 말입니다. 몇 가지 테스트를 해보니 이게 문제가 아니고 제가 관련 정보를 못 찾아서 그런거 같습니다 ㅎㅎㅎㅎ (바보 된 거죠-_-;) 연관글 영역 1. 문제의 발견 한번 'SocketAsyncEventArgs'로 큰 데이터를 ..
Super Chatting 0.82 - 'SuperSocket'과 'ClientEngine'를 이용한 Client/Server Author : Dang-Gun Roleeyas ( http://blog.danggun.net/ ) Create date : 2014.12.31 License : Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) 'SuperSocket'과 'SuperSocket - ClientEngine'을 이용한 채팅 클라이언트/서버 예제입니다. 슈퍼소켓(SuperSocket)은 '.Net'으로 구현된 서버 프레임웍입니다. (참고 : SuperSocket - http://www.supersocket.net/) 클라이언트엔진(Cli..
'SuperSocket'과 'ClientEngine'를 이용한 채팅(Chatting) Client/Server 예제 0.7 'SuperSocket'과 'SuperSocket - ClientEngine'을 이용한 채팅 클라이언트/서버 예제입니다. 슈퍼소켓(SuperSocket)은 '.Net'으로 구현된 서버 프레임웍입니다. (참고 : SuperSocket - http://www.supersocket.net/) 클라이언트엔진(ClientEngine)은 '.Net'으로 구현된 슈퍼소켓기반 클라이언트 프레임웍입니다. (참고 : SuperSocket ClientEngine - http://clientengine.codeplex.com/) 닷넷(.Net)계열에서 꽤 유명한 서버프레임웍으로 알고 있었는데 생각보다 자..
저도 .NET을 초기 버전부터 사용하던 사람이라 초기에 만든 'Client/Server'프로그램을 계속 고쳐서 사용했습니다. 그런데 이번에 슈퍼소켓을 사용하여 서버를 다시 만들려고 자료를 찾다 보니 '.NET 3.5' 부터는 'SocketAsyncEventArgs'를 사용하라고 권장하는군요. 그래서 샘플을 찾는데..... 원하는 셈플이 없어서 하나 만들었습니다. (참고 : 'SocketAsyncEventArgs'를 이용한 채팅(Chatting) Client/Server 예제 0.7) 샘플을 만들면서 느낀 점을 간단히 적어 보겠습니다. 1. 무한 루프여 안녕~ 이전에는 1) 서버에 리스너를 동작시킨 후 2) 무한 루프를 만들고 3) 'TcpListener.AcceptSocket()'로 무한 루프를 대기 시..
'SocketAsyncEventArgs'를 이용한 채팅(Chatting) Client/Server 0.7 닷넷 3.5에서는 비동기 소켓작업을 할때 'SocketAsyncEventArgs'를 이용하라고 합니다. (참고 : [.Net] 'SocketAsyncEventArgs' 사용하기) 그래서 한번 만들어 봤습니다. 다양한 소스를 참고해서 만들었습니다. Visual Studio 2012 프로젝트 입니다. 라이센스는 BSD을 따릅니다. 클라이언트/서버 구조의 채팅프로그램입니다. 주석이 자세히 달려있으므로 코드 설명은 하지 않습니다. 'SocketAsyncEventArgs'를 테스트하려는 목적으로 만든 것이라 테스트가 충분하게 되지 않았습니다. (예외처리가 개판으로 되어있다는 이야기-_-;;;) 그러니 연습용으..