작성
·
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 함수를 호출하므로 메시지 전송 순서를 보장할 수 있습니다.
다시한번 질문해주셔서 감사합니다.