본문 바로가기
반응형

cs공부62

네트워크프로그래밍 - 패킷 자동화 처리 객체지향 방법으로 수행하도록 하기 패킷 자동화 처리 알아보러 가기 네트워크프로그래밍 - 패킷 자동화 처리(TryWriteBytes,c#에서 포인터 사용하는 법) 패킷작업하기 서버, 클라이언트에 이 정보가 다 있어야 한다. class Packet { public short size; public short packetId; } class PlayerInfoReq : Packet { public long playerId; } class PlayerInfoOk : Packet { public int hp; public int atta code-piggy.tistory.com 객체지향 방법 사용하기 패킷을 만든 다음에 해야되는 부분이 너무 많다. 그러므로 밀어 넣어주는 부분을 따로 빼서 객체지향 방법을 사용하는 것이 좋다. 1. Write 01.. 2023. 8. 7.
네트워크프로그래밍 - 직렬화(Serialization), 역직렬화(Deserialization), Session, 패킷 작업 정의 직렬화 객체를 메모리 상태에서 파일이나 네트워크 상등에서 저장하거나 전송하기 위해 일련의 바이트로 변화하는 과정이다. 역직렬화 바이트 배열을 다시 객체로 변환하는 과정이다. 이를 통해 객체의 상탤르 보존하고 이를 파일이나 네트워크를 통해 다른 시스템과 공유하거나 저장할 수 있다. 네트워크 통신에서 직렬화는 데이터를 네트워크로 보내기 위해서 데이터를 일련의 바이트로 변환하여 패킷(Packet)으로 만들어서 전송해야 한다. 서버와 클라이언트 사이에서 주고 받는 데이터도 직렬화를 통해 패킷으로 변화되어 전송된다. 패킷 패킷은 통신할 데이터의 구조를 담고 있으며, 프로토콜에 맞게 직렬화되어 전송된다. 이를 위해 일반적으로 사용되는 데이터 형식은 바이트 배열, 리스트(List), 문자열(String)등이 있다. .. 2023. 8. 3.
네트워크프로그래밍 - 패킷 자동화 처리(TryWriteBytes,c#에서 포인터 사용하는 법) 패킷작업하기 서버, 클라이언트에 이 정보가 다 있어야 한다. class Packet { public short size; public short packetId; } class PlayerInfoReq : Packet { public long playerId; } class PlayerInfoOk : Packet { public int hp; public int attack; } public enum PacketID { PlayerInfoReq = 1, PlayerInfoOk = 2, } 보내는거 설정 01 플레이어 정보 요청을 나타내는 패킷, PlayerInfoReq클래스의 인스턴스 생성 PlayerInfoReq는 클라이언트로부터 플레이어 정보를 요청하는 클래스이다. PlayerInfoReq packe.. 2023. 8. 2.
네트워크 프로그래밍 - PacketSession 패킷작업을 위해서 뭐가 필요할까 기존 세션 코드에 기능을 추가해서 패킷이 들어가므로 수정이 필요하다. 패킷은 네트워크를 통해 전송되는 데이터의 단위이며 TCP와 같은 전송 프로토콜은 데이터를 일정 크기의 블록인 패킷을 분할하여 전송한다. TCP의 경우 패킷이 완전체로 오지 않은 경우가 있으므로 완전체인지 아닌지 구분하는 작업이 필요하다. 패킷 통신을 위한 구조와 처리 과정 01 Packet 클래스 설정 size는 패킷의 크기, packetid는 이를 통해 번호에 따라서 패킷을 구분할 수 있다. class Packet { public int size; public int packetId; } 02 LoginOfPacket LoginOfPacket에는 캐릭터의 정보들을 리스트로 보내준다는 가정하에 이는 크기.. 2023. 7. 31.
네트워크프로그래밍 - SendBuffer 개선하기 RecvBuffer 알아보러 가기 네트워크프로그래밍 - RecvBuffer 개선하기 원래 코드 SocketAsyncEventArgs _recvArgs = new SocketAsyncEventArgs(); public void Start(Socket socket) { _recvArgs.SetBuffer(new byte[1024],0,1024); RegisterRecv(); } setBuffer를 한 다음 어떤 변화도 주지 않았다. 그러므로 _socket.Rece code-piggy.tistory.com public abstract class Session { RecvBuffer _recvBuffer = new RecvBuffer(1024); } RecvBuffer같은 경우 클라이언트 또는 서버가 메시지를 .. 2023. 7. 22.
네트워크프로그래밍 - RecvBuffer 개선하기 원래 코드 SocketAsyncEventArgs _recvArgs = new SocketAsyncEventArgs(); public void Start(Socket socket) { _recvArgs.SetBuffer(new byte[1024],0,1024); RegisterRecv(); } setBuffer를 한 다음 어떤 변화도 주지 않았다. 그러므로 _socket.ReceiveAsync(_recvArgs)에서 우리가 건네주는 버퍼는 위의 Setbuffer이다. void RegisterRecv() { bool pending = _socket.ReceiveAsync(_recvArgs); } TCP 우리가 저번에 TCP에대해 알아보았는데 클라이언트 쪽에서 100바이트를 보낸다고 가정한다면 무조건 100바.. 2023. 7. 19.
반응형