Проблема с обнаружением сервера C#
Всем привет! При программировании сервера и клиента с помощью TcpListener
и TcpClient
у меня произошла ошибка. Как видно из кода сервера и клиента, сначала я задаю TcpListener
и TcpClient
по введённому IP-адресу и порту. Так вот - если я при просьбе ввести IP сервера ввожу что то кроме 127.0.0.1, то программа выдаёт:
Произошла ошибка SocketException - Требуемый адрес для своего контекста неверен.
Вот код сервера (не обращайте внимания на /troll и "ЗДАРОВА!!!":
using System.Net;
using System.Net.Sockets;
namespace Server
{
internal class Program
{
static void Main(string[] args)
{
TcpListener tcp = null;
try
{
IPAddress ip;
int port;
Console.WriteLine("Введите IPv4 адрес:");
string ipAddress = Console.ReadLine().ToString();
Console.WriteLine("Введите порт:");
port = Convert.ToInt32(Console.ReadLine());
ip = IPAddress.Parse(ipAddress);
tcp = new TcpListener(ip, port);
tcp.Start();
Console.WriteLine($"Сервер {tcp.Server.LocalEndPoint} запущен!");
while (true)
{
Socket client = tcp.AcceptSocket();
Console.WriteLine($"Клиент {client.RemoteEndPoint} был подключён");
client.Send(Encoding.Default.GetBytes("ЗДАРОВА!!!"));
Console.WriteLine($"Начало работы с {client.RemoteEndPoint}:");
while (true)
{
string str = Console.ReadLine().ToString();
byte[] buffer = Encoding.Default.GetBytes(str);
if (str.ToLower() == "/troll")
{
for (int i = 1; i <= 400; i++)
client.Send(Encoding.Default.GetBytes("ХАХХАХАХАХА!!!"));
}
else if (str.ToLower() == "/exit")
{
Console.WriteLine($"Работа с {client.RemoteEndPoint} прекращена");
}
else
{
client.Send(buffer);
}
}
}
}
catch (Exception e)
{
Console.WriteLine($"Произошла ошибка {e.GetType().Name} - {e.Message}");
}
finally
{
tcp.Dispose();
tcp.Stop();
Thread.Sleep(1000);
Environment.Exit(0);
}
}
}
}
А вот клиента:
using System;
using System.Net;
using System.Net.Http.Headers;
using System.Net.Sockets;
using System.Text;
namespace Client
{
internal class Program
{
static TcpClient tcp = new TcpClient();
static void Main(string[] args)
{
for (; ; )
{
try
{
IPAddress ip;
int port;
Console.WriteLine("Введите IPv4 адрес:");
string ipAddress = Console.ReadLine().ToString();
Console.WriteLine("Введите порт:");
port = Convert.ToInt32(Console.ReadLine());
ip = IPAddress.Parse(ipAddress);
tcp.Connect(new IPEndPoint(ip, port));
Console.WriteLine($"Клиент подключён!");
NetworkStream ns = tcp.GetStream();
byte[] buffer = new byte[1024];
Console.WriteLine("Поступающие данные:\n");
while (true)
{
if (Console.ReadKey().Key == ConsoleKey.Q)
break;
ns.Read(buffer, 0, buffer.Length);
Console.WriteLine(Encoding.Default.GetString(buffer).ToString());
Array.Clear(buffer);
}
break;
}
catch (Exception e)
{
Console.WriteLine($"Ошибка {e.HResult} по причине \"{e.Message}\"\n");
}
}
tcp.Close();
Console.WriteLine("Клиент завершил работу");
Thread.Sleep(1000);
Environment.Exit(0);
}
}
}
P.S - Хотелось чтобы сервер был расположен на адресе 192.168.x.x