반응형

서버 구현 시 일반적으로 Socket을 설정하는 단계는 아래와 같다.

 

1. 리스닝 Socket 생성

2. 해당 소켓의 EndPoint 설정[ port와 addr 정보 설정 단계 ]

3. 해당 소켓 Binding

4. 소켓 리스닝 시작

5. 클라이언트 접속 Accept

 

그렇다면 이러한 방법이 실제 각 언어별 Code로는 어떻게 작성될까?

 

c++

int main()
{

WSADATA wData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET listenSock;
listenSock = socket(AF_INET, SOCKET_STREAM, IPPROTO_TCP);

SOCKADDR_IN sAdd;
ZeroMemory(&sAdd, sizeof(SOCKADDR_IN));
sAdd.sin_family = AF_INET;
sAdd.sin_port = htons(PORT);
sAddr.sin_addr.s_addr = htonl(INADDR_ANY);

bind(listenSock, (SOCKADDR)*sAddr, sizeof(listen));
listen(listenSock, SOMAXCONN);

SOCKADDR_IN cAdd;
Zeromemory(&cAdd, sizeof(SOCKADDR_IN));
int iClientSize = sizeof(cAdd);
SOCKET cSock = accept(listenSock, (SOCKADDR*)&cAddr, &iClientSize);

WSACleanup();

}

 

C# 

기본적으론 C++과 다르지 않지만 C#은 유틸성 클래스를 여러개 지니고 있기 때문에 알아두면 편한 것들이 있다.

public static void Main()
{

  Socket lSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  IPAddress hostIP = (Dns.Resolve(IPAddress.Any.ToString())).AddressList[0];
  IPEndPoint ep = new IPEndPoint(shotIP, port);
  lSocket.Bind(ep);
  
  int backLog = 100;	//동시에 Accept할 수 있는 최대 갯수
  lSocket.Listen(backLog);
  
  whlie(true)
  {
  	Socket client = lSocket.Accept();
    //연결된 client 관련 처리
  }
}
//TCP 연결에 대한 Socket

public static void Main()
{
  TCPListener server = null;
  try
  {
    int port = 13000;
    IPAddress localAddr = IPAddress.Parse("127.0.0.1");
    
    server = new TCPListener(localAddr, port)
    
    //Socket은 Listen을 시작.
    server.start();
    
    while(true)
    {
      TCPClient newClient = server.AcceptTcpClient();
      
      //새로운 client에 대한 처리.
    }
  }
  catch(Exception e)
  {
  
  }
  finally
  {
  }
}

 

JAVA의 경우는 C++보다는 약간 더 간단하다 단순하게 포트번호만 지정해주면 되는것 같다.

public static void main(String[] args)
{
  try
  {
    ServerSocket sSocket = new ServerSocket(9000);
    //client 접속 소켓 생성
    Socket cSocket = sSocket.accpet();
    
    .....
  }
  catch(Exception e)
  {
  }
}

 

반응형

'Server' 카테고리의 다른 글

동기화 기법들  (0) 2021.06.20
Socket 처리 방법들 : IOCP와 ASIO 방식 등등  (0) 2021.06.20
게임 서버에서의 Log 구성  (0) 2019.09.04
게임 서버에서의 Log의 분류  (0) 2019.09.04
IOCP 동작원리에 대하여[작성중]  (0) 2019.08.26
Posted by Sweetmeats_boy

블로그 이미지
Sweetmeats_boy

태그목록

Yesterday
Today
Total

달력

 « |  » 2024.11
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

최근에 올라온 글

최근에 달린 댓글

최근에 받은 트랙백

글 보관함