기획에서 이야기했듯, 기본적으로 카드게임은 다른 사람과 같이 진행하기 때문에 멀티가 필수적이다.
TCP 공부할 겸 네트워킹을 구현해보자.
그러기 위해서는 우선 네트워크에 대한 정보를 입력할 InputField가 필요하다. UI-InputField를 패널 위에 생성한다.
InputField(TMO)의 구성은 TextArea, Placeholder를 보면 된다. TextArea는 입력 공간, Placeholder은 ‘이름을 입력해주세요…’와 같은 안내 메시지가 써 있는 공간이다. Text도 있긴 한데, InputField(TMP)에서 제어가 가능하다.
입력 패널이 있으면 닫는 버튼도 반드시 있어야한다. X 표시 버튼을 만들어서 패널에 할당하고, 누르면 패널을 비활성화하게 만들자.
우리는 이 InputField에 정보를 입력하여 서버를 생성할 것이다. TCP 통신을 위한 정보를 입력하기 위한 토대다.
차근차근 해나간다고 생각하면 편하다. 그리고 C#에서 어느정도 이 TCP를 지원해주고있다.
using System;
using System.Net;
using System.Net.Sockets;
이 System.Net.Sockets이라는 이름에서 알 수 있듯이, 따로 소켓을 만들 필요가 없다.
여기서 TcpListener과 TcpClient 클래스를 쓰면 더 편하게 사용 할 수 있지만, 공부를 겸해 만드는 것이기에 위의 순서에 맞춰 조금 더 저수준으로 직접 소켓을 생성해보자.
private Socket serverSocket;
private Socket clientSocket;
이 둘로 소켓을 선언할 수 있다.
이후 소켓 객체를 생성할 때 예제에서는 아래처럼 기입되어 있다.
인수를 하나하나 뜯어보면...
AddressFamily address Family : 어떤 주소 패밀리를 사용할 지 나타낸다. IPv4의 경우 InterNetwork, IPv6의 경우 InterNetworkV6을 입력해주자.
SocketType socketType : 소켓의 데이터 흐름과 동작을 결정. 우리는 양방향으로 연결되는 TCP를 만들어 볼 생각이니 Stream을 사용하자.
ProtocolType protocolType : TCP일지, UDP일지. 규격을 설정하는 인수로, 우리는 TCP를 사용한다.
그걸 사용해서 객체를 생성하면 아래와 같다.
private void CreatServerSocket()
{
serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
그럼 이제 위 사진에서 Socket -> bind로 넘어가기 전에, 소켓 생성에서 사용할 IP 주소와 포트 번호를 입력받아야 한다. 관련 함수를 만들어보자.
public void SetIPAndPort(string ipAddressStr, int port)
{
IPAddress ipaddress = IPAddress.Parse(ipAddressStr);
IPEndPoint endpoint = new IPEndPoint(ipaddress, port);
}
위 함수는 string으로 ip주소를, int로 포트 번호를 받아서 IPEndPoint 객체를 새로 생성해준다. 이것으로 우리가 사용할 IP 주소와 포트 번호를 설정하는 것이다.
따로 만들지 않고 함수를 생성한 이유는 InputField를 통해 입력을 받을 생각이기 때문이다. UI를 여기에 맞게 조금 더 고쳐보자.
이것으로 IP와 Port를 InputField를 통해 입력받을 수 있게 되었다.
'IndianPoker' 카테고리의 다른 글
[06] TCP, 클라이언트 만들기 (1) | 2023.10.28 |
---|---|
[05] Thread, Handle Client (1) | 2023.10.28 |
[04] TCP 서버, Thread (0) | 2023.10.26 |
[01-02] 홈과 로딩에 대해 (0) | 2023.10.24 |
[00] 초기 기획 및 구상 (0) | 2023.10.24 |