Есть простое клиент-серверное приложение написанное по мануалам на 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 на котором сейчас запущен сервер этой программы