Я изучал программирование сокетов, я создал асинхронный сервер, который только слушает и возвращает данные.Клиентская сторона IPEndPoint не может использовать IPAddress.Any?
но у меня проблема, я использую IPEndPoint на сервере с IPEndPoint (IPAddress.any, порт), и я делаю то же самое с клиентской стороной. При запуске сервера и клиента, я использую попробовать поймать и на стороне клиента возвращающегося свое исключение, как этот
«Запрошенный адрес не является действительным в контексте 0.0.0.0:port»
здесь ниже код:
Server.cs
Public void Listen()
{
IPEndPoint IpEnd = new IPEndPoint(IPAddress.Any, 11000);
Console.WriteLine("Create new socket");
mainSocket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,ProtocolType.IP);
Console.WriteLine("Bind the socket");
mainSocket.Bind(IpEnd);
Console.WriteLine("Listening to socket");
mainSocket.Listen(10);
Console.WriteLine("Waiting Connection");
mainSocket.BeginAccept(new AsyncCallback(AcceptConnect), null);
}
protected void AcceptConnect(IAsyncResult ar)
{
try
{
Socket client = mainSocket.EndAccept(ar);
SessionData session = new SessionData();
Console.WriteLine("Connection Accepted, waiting for Data");
Console.WriteLine("Waiting a new Connection");
mainSocket.BeginAccept(new AsyncCallback(AcceptConnect), null);
try{
session.clientSocket = client;
client.BeginReceive(session.buffer,0,SessionData.buffersize,0,
new AsyncCallback(ReceiveData), session);
}catch(Exception e){
client.Send(ASCIIEncoding.Default.GetBytes(e.Message));
Console.WriteLine(e.Message);
}
}
catch(Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
}
Client.cs
public void ClientConnect()
{
// Create a TCP/IP socket.
Socket client = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 11000);
// Connect to the remote endpoint.
client.BeginConnect(remoteEP, new AsyncCallback(ConnectServer), client);
}
public void ConnectServer(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
client.EndConnect(ar);
Console.WriteLine("Socket connected to {0}",
client.RemoteEndPoint.ToString());
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
Мой вопрос:
- Нужно ли клиенту указывать на один IP-адрес?
- Я просто использую неправильный код на сервере?
Да, клиенту требуется конкретная конечная точка для подключения. На сервере 0.0.0.0 означает «прослушивать любой возможный интерфейс», но в качестве клиента вы должны указать, к кому вы пытаетесь подключиться. – Joe
Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –
Спасибо за ответ Джо, но даже если я изменил IP-адрес, он все равно дал мне ошибку, «соединение не удалось, потому что сторона связи неправильно ответила или не ответила», в чем проблема сейчас? – Diom