Я пытаюсь создать сервер, используя C #. В настоящее время у меня есть две программы, сервер и клиент, обе из которых работают правильно, когда они работают на одном компьютере, сервер TcpListener
создается с использованием ip 127.0.0.1 (localhost), и клиент подключается к ip 127.0.0.1. Однако, когда я пытаюсь подключиться к серверу, используя мой публичный ip, клиентская программа ждет около 20 секунд, а затем я получаю SocketException: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond
Я уже перенаправил порт, который я использую (порт 2345). Я попытался выполнить те же действия, что и выше, на другом компьютере, но все равно получил тот же результат. Я пытался использовать публичный ip при создании TcpListener
сервера, но затем я получил SocketException: The requested address is not valid in its context
, поэтому я предполагаю, что я должен просто использовать 127.0.0.1 (хотя я могу ошибаться, я впервые пытаюсь что-то подобное) .
Вот функция для создания сервера.
public static void RunServer()
{
string ipStr = "";
Console.WriteLine("Enter IP...");
ipStr = Console.ReadLine();
if (ipStr == "localhost")
ipStr = "127.0.0.1";
IPAddress ip = IPAddress.Parse(ipStr);
int port = -1;
Console.WriteLine("Enter port...");
while (port == -1)
{
try
{
port = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("Please enter an integer.");
}
}
Console.WriteLine("Starting server on " + ip + ":" + port);
TcpListener tcpListener;
try
{
tcpListener = new TcpListener(ip, port);
tcpListener.Start();
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e);
Console.ReadLine();
return;
}
while (true)
{
try
{
TcpClient tcpClient = tcpListener.AcceptTcpClient();
NetworkStream networkStream = tcpClient.GetStream();
StreamReader sr = new StreamReader(networkStream);
string msg = sr.ReadToEnd();
Console.WriteLine("Received message: \"" + msg + "\"");
sr.Close();
networkStream.Close();
tcpClient.Close();
}
catch (Exception e)
{
Console.WriteLine("Exception: " + e);
}
}
}
И функция для создания клиента.
public static void RunClient()
{
string ip = "";
Console.WriteLine("Enter IP...");
ip = Console.ReadLine();
int port = -1;
Console.WriteLine("Enter port...");
while (port == -1)
{
try
{
port = int.Parse(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("Please enter an integer.");
}
}
while (true)
{
Console.WriteLine("Enter message...");
string msg = Console.ReadLine();
Console.WriteLine("Sending message: \"" + msg + "\"");
TcpClient tcpClient;
try
{
tcpClient = new TcpClient(ip, port);
}
catch (SocketException e)
{
Console.WriteLine("Could not connect to server. Connection refused.");
Console.WriteLine("Exception: " + e);
continue;
}
NetworkStream networkStream = tcpClient.GetStream();
networkStream.Write(Encoding.ASCII.GetBytes(msg), 0, msg.Length);
Console.WriteLine("Sent message!");
networkStream.Close();
tcpClient.Close();
}
}
Я думал, что то, что у меня сейчас есть, будет работать, но все, что я получаю, это исключение.