Еще одна проблема подключения TCPClient - PullRequest
0 голосов
/ 30 октября 2018

Обзор
Эта проблема убивает меня так сильно в последнее время. Я пытаюсь настроить соединение через сеть сервер и клиент. Прежде чем показать свой код, я бы хотел сказать, что я искал несколько тем о том, как исправить эту проблему, но это ставит меня в тупик, как сумасшедшего.

Ошибка: попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, потому что подключенный хост не смог ответить.

Для начала вот список вещей, которые я пробовал:
Переадресация порта
-Использование локальных IP-адресов и локальных IP-адресов (т. Е. 127.0.0.1, 192.168.1.4, 10.0.0.150) Эти IP-адреса будут работать и подключать меня к серверу ... мой внешний IP-адрес не будет.
-Проверенный брандмауэр
-Пробовал использовать разные порты, если провайдер блокировал определенные порты (25567,28567 и т. Д.)

Теперь для моего кода ...

Клиент Unity3D:

public string host = "Insert IP Here";
public int port = 25567;
public TcpClient socket = new TcpClient();
public void ConnectToServer()
{
    while (true)
    {
        try
        {
            socket.ReceiveTimeout = 100;
            socket.SendTimeout = 100;
            socket.Connect(new IPEndPoint(IPAddress.Parse(host), port));
            stream = socket.GetStream();
            writer = new StreamWriter(stream);
            reader = new StreamReader(stream);
            MasterCommunication MC = GameObject.Find("Main").GetComponent<MasterCommunication>();
            MC.setCommunicationPrams(socket, stream, reader, writer, true);
            socketReady = true;
            break;
        }
        catch (Exception e)
        {
            Debug.Log("Connection timed out.");
            Debug.Log(e.Message);
            break;
        }
    }
}

Сервер (Visual Studio):

        public static int port = 63292;
    private static TcpListener server;
    static void Main(string[] args) // Main Method
    {
        #region Initialization
        Console.WriteLine("...Server Initializing");
        clients = new List<ServerClient>();
        disconnectList = new List<ServerClient>();
        try
        {
            IPEndPoint IPEP = new IPEndPoint(IPAddress.Any, port);
            Console.WriteLine("...IPEP set to " + IPEP.AddressFamily);
            Console.WriteLine("...Port Set to " + port);
            server = new TcpListener(IPEP);
            server.Start();
            StartListening();
            Thread dataListener = new Thread(ListenForData);
            dataListener.Start();
            if (Directory.Exists(Directory.GetCurrentDirectory() + "/Database"))
            {
                Console.WriteLine("...Database Found");
            }
            else
            {
                Directory.CreateDirectory(Directory.GetCurrentDirectory() + "/Database");
                Console.WriteLine("...Database Created");
            }
            Database.VerifyDatabase(Directory.GetCurrentDirectory() + "/Database");
            Console.WriteLine("...Server has successfully started.");
        }
        catch (Exception e)
        {
            Console.WriteLine("Socket error: " + e.Message);
        }
        #endregion


    }

Сервер (Вторая половина)

private static void StartListening() => server.BeginAcceptTcpClient(AcceptTcpClient, server);

    private static void AcceptTcpClient(IAsyncResult ar)
    {
        try
        {
            Console.WriteLine("-New Connection");
            TcpListener listener = (TcpListener)ar.AsyncState;
            clients.Add(new ServerClient(listener.EndAcceptTcpClient(ar)));
            StreamWriter writer = new StreamWriter(clients.Last<ServerClient>().tcp.GetStream());
            writer.WriteLine(Encryption.Encrypt("Connected~Connected"));
            writer.Flush();
            StartListening();
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
            StartListening();
        }
    }

Halp T ^ T

...