Почему клиент не может достучаться до сервера в приложении на c#?

Есть простое клиент-серверное приложение написанное по мануалам на c#. Если запустить сервер и клиент на одной машине, то клиент может спокойно общаться с сервером. Но если я запускаю сервер на VPS с выделенным белый ip то клиент не может достучаться до сервера. Причем у сервера точно открыт порт и в брандмауэре все разрешения есть на входящие и исходящие подключения. Пробовал запускать сервер так же на физическом компе с выделенным ip и открым портом - всё равно не работает. В чем причина господа? Прикрепляю код сервера и клиента, так как они достаточно малы.

сервер:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Net.Http.Headers;

namespace server
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Однопоточный сервер запущен!");
            IPHostEntry iPHost = Dns.GetHostEntry("localhost");
            IPAddress ipAddr = iPHost.AddressList[0];
            
            IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, 1005);
            


            Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            
            try
            {
                sock.Bind(ipEndPoint);
                sock.Listen(10);
               
                while (true)
                {
                    Console.WriteLine("Слушаем, порт {0}", ipEndPoint);

                    Socket s = sock.Accept();
                    
                    string data = null;
                    byte[] bytes = new byte[1024];
                    int bytesCount = s.Receive(bytes);
                    data += Encoding.UTF8.GetString(bytes, 0, bytesCount);
                    Console.Write("Данные от клиента: " + data + "\n\n");
                    string reply = "Query size: " + data + data.Length.ToString() + " chars";
                    byte[] msg = Encoding.UTF8.GetBytes(reply);
                   


                    if (data.IndexOf("<TheEnd>") > -1)
                    {
                        Console.WriteLine("Соединение завершено.");
                        break;
                    }
                    if (data.IndexOf("<sss>") > -1)
                    {
                        
                        Console.WriteLine("работает");
                        break;
                    }
                    s.Shutdown(SocketShutdown.Both);
                    s.Close();

                    

                }

            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {
                Console.ReadLine();
            }
        }
    }
}


клиент:
using System;
using System.Text;
using System.Net;
using System.Net.Sockets;

namespace client
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Communicate("195.133.144.88", 1005);


            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }
            finally
            {

                Console.ReadLine();
            }
        }

        static void Communicate(string hostname, int port)
        {
            byte[] bytes = new byte[1024];
            IPHostEntry ipHost = Dns.GetHostEntry(hostname);
            IPAddress ipAddr = ipHost.AddressList[0];
            IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, port);

            Socket sock = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            sock.Connect(ipEndPoint);
            Console.Write("Введите сообщение: ");
            string message = Console.ReadLine();

            Console.WriteLine("Подключаемся к порту {0} ", sock.RemoteEndPoint.ToString());
            byte[] data = Encoding.UTF8.GetBytes(message);
            int bytesSent = sock.Send(data);

            int bytesRec = sock.Receive(bytes);
            Console.WriteLine("\nОтвет сервера: {0}\n\n", Encoding.UTF8.GetString(bytes, 0, bytesRec));

            if (message.IndexOf("<TheEnd>") == -1)
                Communicate(hostname, port);
            sock.Shutdown(SocketShutdown.Both);
            sock.Close();
        }
    }
}


ip адрес в примере клиента реальный - это ip адрес vps на котором сейчас запущен сервер этой программы
  • Вопрос задан
  • 339 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы