C#. Клиент-серверное приложение - PullRequest
0 голосов
/ 12 июля 2020

Я делаю небольшое серверное приложение, использующее протокол TCP. Он уже может sh устанавливать соединение между несколькими клиентами. Проблема в том, что работает локально. Поэтому мне интересно, как я могу получить IP-адрес хоста и заставить сервер принимать клиентские соединения через Inte rnet?

public static class Server
{
    static Socket socket = new Socket(SocketType.Stream, ProtocolType.Tcp);
    static int nextID = 1;
    static List<Socket> clients = new List<Socket>(5);
    static MemoryStream stream = new MemoryStream(new byte[256], 0, 256, true, true);
    static BinaryReader reader = new BinaryReader(stream);
    static BinaryWriter writer = new BinaryWriter(stream);
    public static void Init()
    {
        Console.Title = "Server";
        socket.Bind(new IPEndPoint(IPAddress.Any, 8080));
        socket.Listen(0);
        socket.BeginAccept(AcceptCallBack, null);
        
        Console.ReadLine();
    }

    static void AcceptCallBack(IAsyncResult ar)
    {
        Socket client = socket.EndAccept(ar);
        clients.Add(client);
        Thread thread = new Thread(HandleClient);
        thread.Start(client);
        socket.BeginAccept(AcceptCallBack, null);
    }

    static void HandleClient(object obj)
    {
        Socket client = (Socket)obj;
        while(true)
        {
            stream.Position = 0;
            client.Receive(stream.GetBuffer());

            int code = reader.ReadInt32();

            switch(code)
            {
                case 0:
                    writer.Write(nextID++);
                    socket.Send(stream.GetBuffer());
                    break;
                case 1:
                    foreach (Socket cl in clients)
                        if (cl != client)
                            cl.Send(stream.GetBuffer());
                    break;
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...