#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