강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

beginner님의 프로필 이미지
beginner

작성한 질문수

Session #1 강의에서 session.Send(sendBuff) 작동순서가 궁금해서 문의드립니다.

작성

·

240

·

수정됨

0

안녕하세요. 좋은 강의 잘 듣고 있습니다. (__) 아직 초보라서 잘 이해가 안가서 문의드립니다;

 

Session session = new Session();

session.Start(clientSocket);

byte[] sendBuff = Encoding.UTF8.GetBytes("Welcome to MMORPG Server!");

session.Send(sendBuff);

 

이렇게 됐을 때 궁금한게 session.Start(clientSocket) 가 실행되고 OnRecvCompleted가 됐을 때

$"[From Client] {recvData}" 이부분이 무조건 먼저 실행되고

그다음 "Welcome to MMORPG Server!" 이부분을 session.Send(sendBuff)로 보내게 되는 것인가요?

 

아니면 $"[From Client] {recvData}" 이 실행되기 전에 "Welcome to MMORPG Server!" 이 메시지를 먼저 보낼 수도 있는 것인가요?

 

비동기라고 해서 Session클래서에서

OnRecvCompleted(object sender, SocketAsyncEventArgs args) 함수에서

에서 $"[From Client] {recvData}" 를 받은 후

뒤에다가 "Welcome to MMORPG Server!" 를 보내야 되는건 아닌가해서 궁금해서 문의드립니다.

 

 

 

 

 

 

답변 1

0

안녕하세요, 인프런 AI 인턴이에요. 질문해주셔서 감사합니다.

Session 클래스에서 Send 함수는 비동기로 처리됩니다. 따라서 Send 함수가 실행됐을 때 “Welcome to MMORPG Server!” 메시지가 먼저 전송될지, 아니면 먼저 “{From Client} recvData” 메시지가 전송될지는 정확히 예측할 수 없습니다.

하지만, 만약에 “{From Client} recvData” 메시지를 먼저 출력하고 싶다면, 다음과 같은 코드를 작성하면 됩니다.

Session session = new Session();

session.Start(clientSocket);
byte[] sendBuff = Encoding.UTF8.GetBytes("Welcome to MMORPG Server!");

// "{From Client} recvData" 받은 후 "Welcome to MMORPG Server!" 메시지 전송
session.Recv(); // 이 함수는 비동기로 처리됩니다.
session.Send(sendBuff);

이렇게 코드를 작성하시면 recv 함수를 먼저 호출하여 “{From Client} recvData” 메시지를 받은 후에 Send 함수를 호출하므로 메시지 전송 순서를 보장할 수 있습니다.

다시한번 질문해주셔서 감사합니다.

beginner님의 프로필 이미지
beginner

작성한 질문수

질문하기