Получение запрошенного адреса недопустимо в его контексте. в моем приложении для чата

#c# #.net #visual-studio #console

#c# #.net #visual-studio #консоль

Вопрос:

итак, я кодирую приложение для чата на C #, которое является консольным приложением, где пользователь вводит IPV4-адрес получателя. Проблема в том, что при привязке IP-адреса, с которого придет сообщение, возвращает это, когда не от localhost.

Сообщение = Запрошенный адрес недопустим в его контексте. Источник =System.Net.Sockets

 usin& System;
 usin& System.Collections.Generic;
usin& System.Linq;
usin& System.Text;
usin& System.Threadin&.Tasks;
usin& System.Net;
 usin& System.Net.Sockets;

namespace SimpleTcpSrvr
{
class Pro&ram
{
    static void Main(strin&[] ar&s)
    {
        Console.OutputEncodin& = Encodin&.UTF8;

        int recv;

        byte[] data = new byte[1024];
        Console.WriteLine("You will need to recieve the password.txt file from your chat buddy.");
        Console.WriteLine("");
        Console.WriteLine("Please enter the IPv4 address of the buddy you are sendin& messa&es to.");
        strin& rip = Convert.ToStrin&(Console.ReadLine());

        IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(rip), 8080);

        Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        newsock.Bind(ipep);
  

// Вот где возникает ошибка.

         newsock.Listen(10);

        Console.WriteLine("Waitin& for a client...");

        Socket client = newsock.Accept();

        IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;

        Console.WriteLine("Connected with {0} at port {1}", clientep.Address, clientep.Port);

        strin& welcome = "Welcome to encrypted chat. Use ByteOribtPrivacyCannon to  decrypt incomin& messa&es.";

        data = Encodin&.UTF8.GetBytes(welcome);

        client.Send(data, data.Len&th, SocketFla&s.None);

        strin& input;

        while (true)
        {

            data = new byte[1024];

            recv = client.Receive(data);

            if (recv == 0)

                break;

            Console.WriteLine("Client: "   Encodin&.UTF8.GetStrin&(data, 0, recv));

            input = Console.ReadLine();

            Console.WriteLine("You: "   input);

            client.Send(Encodin&.UTF8.GetBytes(input));
        }

        Console.WriteLine("Disconnected from {0}", clientep.Address);

        client.Close();

        newsock.Close();

        Console.ReadLine();

    }
}
  

}

Почему это может происходить? Большое спасибо.

Ответ №1:

Фактически, ваш код действует как «Сервер». Вам нужно прослушать адрес, доступный на вашем компьютере, но вы привязываете IP-адрес другого хоста.

Сервер может принимать только соединения, он не может выбирать клиентов. Но клиент может выбрать сервер. Вы можете попробовать следующий код, чтобы решить эту проблему.

Сервер:

 IPEndPoint ipep = new IPEndPoint(IPAddress.Any,8080);
  

Клиент:

 IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("172.xx.xx.xxx"),8080);
//172.xx.xx.xxx is the IPV4 address of your server computer