У меня не корректно работает tcp ip подключение c#

Рейтинг: 0Ответов: 1Опубликовано: 26.03.2023

у меня не корректно работает tcp ip подключение на с#. Вот код сервера:

const int port = 11000;

        var tcpEndPoint = new IPEndPoint(IPAddress.Any, port);

        var tcpSocket = new Socket(ip.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
        tcpSocket.Bind(tcpEndPoint);
        tcpSocket.Listen(10);

        while (true)
        {
            var listener = tcpSocket.Accept();
            var buffer = new byte[256];
            var size = 0;
            var data = new StringBuilder();

            do
            {
                size = listener.Receive(buffer);
                data.Append(Encoding.UTF8.GetString(buffer, 0, size));
            }
            while (listener.Available > 0);

            Console.WriteLine(data); // TODO: проверить .ToString

            listener.Send(Encoding.UTF8.GetBytes("Успех"));

            listener.Shutdown(SocketShutdown.Both);
            listener.Close();
        }

вот клиент:

const string ip = "192.168.100.123";
    const int port = 11000;

    var tcpEndPoint = new IPEndPoint(IPAddress.Parse(ip), port);

    var tcpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    var message = "КУ";

    var data = Encoding.UTF8.GetBytes(message);

    tcpSocket.Connect(tcpEndPoint);
    tcpSocket.Send(data);

    var buffer = new byte[256];
    var size = 0;
    var answer = new StringBuilder();

    do
    {
        size = tcpSocket.Receive(buffer);
        answer.Append(Encoding.UTF8.GetString(buffer, 0, size));
    }
    while (tcpSocket.Available > 0);

    _loadText.text = answer.ToString();

    StartCoroutine(SceneStart());

    tcpSocket.Shutdown(SocketShutdown.Both);
    tcpSocket.Close();

НЕ корректно имеется ввиду в том, что это работает тогда когда клиент и сервер подключен к одному WI-FI. Помогите пожалуйста

Ответы

▲ 0

Всё довольно просто.

Смотрите.

Вот есть у вас один вай-фай.

Внутри него есть некоторое (обычно ~255) IP адресов. Они имеют формат 192.168.x.x и называются "интеранет адресами". Это не опечатка: интранет - это "локальный интернет".

Эта сеть имеет выход в "большой интернет" через роутер, который обычно и раздаёт wifi.

Когда и клиент, и сервер внутри одного вайфая - они внутри этой локальной сети видят друг друга.

Но когда "вай фаи разные" - это означает, что клиент и сервер находятся - каждый - внутри своей локальной сети.

И они не видят друг друга.

Преодолевать это можно разными способами, самые простые из них - так называемая "публикация порта".

Можете прочитать вот такой и такой ответ на другие вопросы, которые еще немного рассказыват про структуру сети.