Tcp intr anet проблемы с подключением C# - PullRequest
0 голосов
/ 14 марта 2020

У меня проблемы с установлением TCP-соединения между двумя устройствами, подключенными к одной и той же сети Wi-Fi (P C и мобильным), код, кажется, в порядке, но клиент (в моем случае, телефон) продолжает пытаться подключиться и к серверу (р c), ждать подключения и в итоге ничего не происходит. Я попытался настроить брандмауэр на P C, но он все равно не работает. Мне бы хотелось, чтобы эти приложения могли работать на других ПК без особой настройки и настройки, поскольку это инструмент для демонстрации в университете.

Я также дал ему разрешения на подключение к Интернету. rnet к мобильному приложению

Здесь я оставляю код п c:

class TcpServerCode
{
    IPEndPoint ipEnd;
    Socket sock;

    public TcpServerCode(int port)
    {
        ipEnd = new IPEndPoint(IPAddress.Any, port);
        sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
        sock.Bind(ipEnd);
    }

    public static string curMsg = "Stopped";

    public void StartServer()
    {
        try
        {
            curMsg = "Starting...";
            sock.Listen(100);
            curMsg = "Running and waiting to receive file.";
            Socket clientSock = sock.Accept();
            byte[] clientData = new byte[1024];
            int receivedBytesLen = clientSock.Receive(clientData);
            curMsg = "Receiving data...";
            int fileNameLen = BitConverter.ToInt32(clientData, 0);
            string getStr = Encoding.ASCII.GetString(clientData, 4, fileNameLen);

            Form1.Singletone.ConsoleLog(getStr);
            clientSock.Close();
        }
        catch (Exception ex)
        {
            curMsg = "Error.";
        }
    }
}

А здесь мобильный:

class TcpClientCode
{
    public static string curMsg = "Idle";

    public static void SendComand(string comand)
    {
        try
        {
            IPAddress[] ipAddress = Dns.GetHostAddresses("localhost");
            IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656);
            Socket clientSock = new Socket(AddressFamily.InterNetwork,
                SocketType.Stream, ProtocolType.IP);
            byte[] fileNameByte = Encoding.ASCII.GetBytes(comand);
            byte[] clientData = new byte[4 + fileNameByte.Length];

            curMsg = "Connection to server ...";
            clientSock.Connect(ipEnd);
            curMsg = "Command sending...";
            clientSock.Send(clientData);
            curMsg = "Disconnecting...";
            clientSock.Close();
            curMsg = "transferred.";
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
}

1 Ответ

0 голосов
/ 14 марта 2020

Для тех, кто хочет знать, я решил это благодаря SushiHangover, и проблема заключалась в том, что мне пришлось заставить моего клиента подключаться к IPv4 сервера, потому что он находится в системе intr anet.

И для получения локального IP-адреса:

public static string GetLocalIPAddress()
{
    var host = Dns.GetHostEntry(Dns.GetHostName());
    foreach (var ip in host.AddressList)
    {
        if (ip.AddressFamily == AddressFamily.InterNetwork)
        {
            return ip.ToString();
        }
    }
    throw new Exception("No network adapters with an IPv4 address in the system!");
}

Чтобы проверить, подключены ли вы или нет:

System.Net.NetworkInformation.NetworkInterface.GetIsNetworkAvailable();

Информация взята с Получить локальный IP-адрес

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...