LHH Blog
취소

(C#) RecvBuffer

클라이언트에게 버퍼를 받아서 관리해줄 RecvBuffer Class를 구현할 것이다. 만약 패킷을 받았을 때 버퍼 100중에서 80 정도만 왔다면 이것을 읽으면 안된다. RecvBuffer Class는 이를 확인하기 위해 100 전체가 올때까지 기다리고 읽게 만들 것이다. 💻 코드 RecvBuffer Class를 만들고 변수를 선언해준다. _w...

TCP/UDP 프로토콜 요약

TCP / UDP 차이점 연결 지향성 TCP 연결을 위해 할당되는 논리적인 경로가 있다. 전송 시 순서가 보장됨. UDP 연결이란 개념이 없다. 전송 시 순서가 보장되지 않는다. ...

(C#) Connector

당연한 소리지만 서버 통신에 있어서 서버만 구현하면 안되고, 클라이언트 부분에서도 서버로 연결요청을 해줘야한다. 이또한 사용되는 Connect라는 명령어를 비동기식으로 만들어야되기 때문에 구현이 필요하다. 💻 코드 ServerCore에 Connector 클래스를 생성한다. 구현 방식은 Listener와 매우 흡사하므로 추가된 코드는 주석에 적어놨...

(C#) Session [4]

지난 글(Session [3])에 이어서 완성된 Session을 사용해 보도록 한다. 💻 코드 비동기식으로 만들어진 Send, Recv 등을 사용하기 위해 추상메소드로 만들어준다. abstract class Session { public abstract void OnConnected(EndPoint endPoint); public ab...

(C#) Session [3]

지난 글(Session [2])에 이어서 이번에는 보낼 버퍼들을 등록할 때 한꺼번에 list에 넣어 SendAsync하도록 수정하여 Send를 더욱 효율적이게 만든다. 💻 코드 이제 bool _pending 대신 list로 byte를 담아 pending 여부를 확인할 것이다. List<ArraySegment<byte>> _pe...

(Blog) 경로가 같은데 avatar가 안된다면

Git Blog를 만드는데 경로 지정을 잘했음에도 avatar 등록이 안된다면 _config.yml의 img_cdn을 공백으로 만들고 Push해보도록 한다. img_cdn: '' avatar: /assets/img/[파일이름]

(C#) Session [2]

지난 글(Session [1])에 이어서 이번에는 Send를 비동기로 만들어준다. 💻 코드 Send는 여러 클라이언트가 _socket.SendAsync를 접근했을 때 느리고 부하가생긴다. 이 때문에 생성 후 사용보다 미리 만들어 놓고 재사용하는 것이 더 좋을 것이다. 여러 클라이언트들이 접근하므로 쓰레드 사용을 위해 _lock을 생성해준다....

(Blog) 갑작스러운 빌드/배포 오류

어느날 갑자기 잘되던 블로그가 Push한번 했다고 빌드 오류가 나서 애를 좀 먹었었다. 처음엔 가끔 그럴 수 있다 생각하며 다음 Push 때는 되겠지 하고 넘어갔는데.. 계속 Push를 해도 안되서 매우 당황했다. (Git에 대해 지식이 부족한편..🙄) 분명 post도 잘썼고, config도 문제가 전혀~~ 없는데 생전 처음보는 에러에 당황해서 ...

(C#) Session [1]

지난 글(Listener)에서 Listener를 비동기식으로 실행되도록 구현하였다. 이번에는 서버에서 클라이언트로 데이터를 보낼 때 비동기식으로 구현한다. 💻 코드 코드 구성은 Listener Class에서 구현한 것과 비슷하다. 이번에는 소켓 프로그래밍 기초에서 구현했던 Recv를 비동기식으로 수정할 것이다. 먼저 Session Class를 ...

(C#) Listener

동기/비동기화 소켓을 사용할때 서버에서 Accept()를 사용하면 기본적으로 동기화가 되어 코드 블로킹이 진행되다. 이 때문에 클라이언트가 접속하기 전까지는 다음코드를 진행하지 않는다. 서버는 다른 작업도 해야하는 상황에 이렇게 무한정 기다리는 것은 비효율적이다. 그러므로 클라이언트를 기다리지 않고 다음 작업으로 바로 넘어갈 수 있도록 비동기화 ...