반응형

네트워크 10

Socket Programming의 기본 개념

소켓 프로그래밍은 네트워크 상에서 서로 다른 시스템 간의 통신을 가능하게 하는 방법입니다. 소켓을 사용하면 애플리케이션 간에 데이터를 교환할 수 있습니다. 이는 네트워크 통신의 기본적인 구성 요소로, 인터넷이나 다른 네트워크를 통해 정보를 주고받는 모든 프로그램의 기반이 됩니다. 소켓의 기본 개념 소켓(Socket): 네트워크 통신의 끝점을 의미합니다. 소켓은 IP 주소와 포트 번호의 조합으로 정의됩니다. 서버와 클라이언트는 각각 소켓을 생성하고, 이 소켓들을 통해 서로 통신합니다. IP 주소: 네트워크 상의 기기를 식별하는 주소입니다. IPv4와 IPv6의 두 가지 버전이 있습니다. 포트 번호: 기기 내에서 특정 프로그램을 식별하기 위한 번호입니다. IP 주소가 '아파트 단지'라면, 포트 번호는 '구체..

비동기 연결 예제

using System; using System.Net; using System.Net.Sockets; using System.Text; public class AsynchronousClient { // 서버의 IP 주소와 포트 번호 설정 private const string SERVER_IP = "127.0.0.1"; // 서버 IP, 실제 환경에 맞게 수정 private const int SERVER_PORT = 11000; // 서버 포트, 실제 환경에 맞게 수정 public static void StartClient() { // 원격 서버의 엔드포인트 설정 IPAddress ipAddress = IPAddress.Parse(SERVER_IP); IPEndPoint remoteEP = new IPE..

Socket Programming

Socket Programming 소켓 프로그래밍은 네트워크를 통해 서로 다른 시스템에서 실행되는 두 프로세스 간의 통신을 설정하기 위해 컴퓨터 네트워킹에서 사용되는 기술입니다. 클라이언트-서버 아키텍처를 사용하여 프로세스 간에 데이터를 전송합니다. 소켓 프로그래밍 구조에는 다음 단계가 포함됩니다. 1. 소켓 만들기 소켓 프로그래밍의 첫 번째 단계는 네트워크 연결의 끝점을 나타내는 데이터 구조인 소켓을 만드는 것입니다. 소켓은 도메인, 유형 및 프로토콜의 세 가지 매개 변수를 사용하는 socket() 함수를 사용하여 만들 수 있습니다. DWORD WINAPI TCPServer4(LPVOID arg) { int retval; // return value SOCKET listenSocket = socket(..

Google Protocol Buffers 설치

C# 으로 하는 Protobuf https://github.com/protocolbuffers/protobuf/releases Releases · protocolbuffers/protobuf Protocol Buffers - Google's data interchange format - protocolbuffers/protobuf github.com 여기서 protoc-{"버전"}-win64.zip을 다운로드! 압축을 풀면 위의 파일이 생성됨 protoc-21.2-win64/bin 폴더에 보면 protoc.exe파일이 있는걸 볼 수 있음 bin 폴더에 배치파일, Protocol.proto 라는 이름의 파일을 만들어주고 비주얼스튜디오로 드래그앤 드롭 Protocol.proto syntax = "proto3..

네트워크 2022.07.19

[C#] 패킷 효율적으로 보내기

수백명이 채팅을 한다고 할때 패킷을 하나하나씩 보내면 답도 없음 그래서 밑에처럼 모아서 보내야함 class GameRoom : IJobQueue { List _sessions = new List(); JobQueue _jobQueue = new JobQueue(); List _pendingList = new List(); ArraySegment를 List에 담아서 한방에 보낼거 public void Push(Action job) { _jobQueue.Push(job); } public void Flush() { foreach (ClientSession s in _sessions) s.Send(_pendingList); Console.WriteLine($"Flushed {_pendingList.Count}..

네트워크 2022.06.21

[C#] JobQueue

JobQueue는 하나의 Todo List정도로 생각하면 됨 lock을 이용하면 Thread가 하는일들이 겹칠일이 없음 하지만 수십, 수백의 사람들이 통신을 하는 상황에서는 겹치지 않는다 하더라도 아래와 같은 문제가 생길 수 있음 - lock이 풀릴때까지 대기 - 사용가능한 thread 없음 - thread 생성 - 반복 이때 사용하는게 _jobQueue public interface IJobQueue { void Push(Action job); } public class JobQueue : IJobQueue { Queue _jobQueue = new Queue(); object _lock = new object(); bool _flush = false; public void Push(Action job..

네트워크 2022.06.20
반응형