본문 바로가기
cs공부/네트워크프로그래밍

네트워크프로그래밍 - blocking(send등), non-blocking(BeiginSend,SocketAsyncEventArgs등)

by 코딩하는 돼징 2023. 6. 21.
반응형

입출력 작업은 블로킹(blocking) 또는 논블로킹(Non-blocking)방식으로 수행된다.

 

1. 블로킹(Blocking)

블로킹 방식에는 입출력 작업이 완료될 때까지 호출한 함수가 대기한다. 입출력 함수가 호출되면, 작업이 완료되기 전까지 호출한 쓰레드는 정지하고 블로킹된다. 

장점

코드를 단순하게 작성할 수 있고 동기적인 동작이 필요한 경우 유용하다.

단점

여러 작업을 동시에 처리해야 하는 경우 다른 쓰레드를 사용해야 하며, 블로킹 호출은 전체 시스템 처리량을 감소시킬 수 있다.


blocking방식 이용한 Server코드

 

네트워크 프로그래밍 - C# 간단한 Server 소켓프로그래밍 구현

소켓프로그래밍 과정 알아보러가기 네트워크프로그래밍 - 소켓 프로그래밍(클라이언트 관점, 서버관점) 과정 손님 관점 클라이언트 관점 핸드폰 준비 소켓(클라이언트와 서번 간의 데이터 송수

code-piggy.tistory.com


대표적인 블로킹 함수

01 Send

public int Send(byte[] buffer);

02 Receive

public int Receive(byte[] buffer);

03 Conncect

public void Connect(EndPoint remoteEP);

2. 논블로킹(Non-blocking)

논블로킹 방식에서는 입출력 작업이 완료되지 않더라도 호출한 함수가 즉시 반환된다. 이를 사용하면 대기하지 않고 다른 작업을 수행할 수 있다. 이벤트 또는 콜백을 사용하여 작업 완료를 처리 해야 한다.

장점

여러 작업을 동시에 처리할 수 있으며, 전체 시스템 처리량을 향상시킬 수 있다.

단점

비동기에 대한 이해가 많이 필요하다.


Non-blocking방식 이용한 Server코드

 

네트워크프로그래밍 - C# 간단한 Non - blocking 사용한 Server 소켓프로그래밍 구현

blocking방식 이용한 Server코드 네트워크 프로그래밍 - C# 간단한 Server 소켓프로그래밍 구현 소켓프로그래밍 과정 알아보러가기 네트워크프로그래밍 - 소켓 프로그래밍(클라이언트 관점, 서버관점)

code-piggy.tistory.com


대표적인 논블로킹 함수

01 BeiginSend

public IAsyncResult BeginSend(byte[] buffer, int offset, int size, SocketFlags socketFlags, AsyncCallback callback, object state);

매개변수

buffer  : 전송할 데이터를 담고 있는 버퍼

offset : 버퍼에서 전송을 시작할 위치

size : 전송할 최대 데이터 크기

socketflags : 전송에대한 특정 socketflag

callback : 비동기 작업이 완료되었을때 호출될 콜백 메서드

state : 비동기 작업과 관련된 상태 정보를 나타내는 개체

반환

IAsyncResult : 비동기 작업과 관련된 상태 정보를 포함하는 인터페이스

02 BeginReceive

public IAsyncResult BeginReceive(byte[] buffer, int offset, int size, SocketFlags socketFlags, AsyncCallback callback, object state);

매개변수

buffer  :  수신한 데이터를 담고 있는 버퍼

offset : 버퍼에서 수신을 시작할 위치

size : 수신할 최대 데이터 크기

socketflags : 수시에 대한 특정 socketflag

callback : 비동기 작업이 완료되었을때 호출될 콜백 메서드

state : 비동기 작업과 관련된 상태 정보를 나타내는 개체

반환 

IAsyncResult : 비동기 작업과 관련된 상태 정보를 포함하는 인터페이스

03 BeiginConnect

public IAsyncResult BeginConnect(EndPoint remoteEP, AsyncCallback callback, object state);

매개변수

remoteEP : 원격 버서의 엔드포인트

callback : 비동기 작업이 완료될때 호출되는 콜백

state : 사용자 지정 상태 개체, 콜백 메서드에서 사용될 수 있다.

반환

IAsynResult : 비동기 작업의 상태와 진행 상황을 나타내는 개체


SocketAsyncEventArgs

비동기 소켓 작업을 수행하기 위해 사용되는 클래스이다. 이를 사용하면 미리 생성된 객체를 재사용할 수 있다는 장점이 있다. 이 객체는 비동기 작업에 대한 매개변수, 결과 및 콜백 정보를 저장할 수 있다.

 

01 AcceptAsync

비동기적으로 클라이언트의 연결 요청을 받는 socket작업을 수행한다.

public bool AcceptAsync(SocketAsyncEventArgs e);

02 SocketError

비동기 소켓 작업의 결과를 가져오거나 설정한다.

public SocketError SocketError { get; set; }

결과가 성공적인 경우 SocketError.Success가 반환된다.


03 SocketAsyncEventArgs.Completed

SocketAsyncEventArgs의 이벤트로 비동기 소켓의 작업이 완료되었을 때 발생한다. 소켓 작업의 완료 상태를 감지하고 처리할 수 있다.

public event EventHandler<SocketAsyncEventArgs> Completed;
반응형

댓글