2019. 9. 6. 18:50 Server
서버 Socket 설정하는 방법들
반응형
서버 구현 시 일반적으로 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 |