我一直在学习一些套接字编程,我创建了一个只侦听并返回数据的异步服务器。客户端IPEndPoint无法使用IPAddress.Any?
但我在这里有一个问题,我在IPEndPoint(IPAddress.any,端口)服务器上使用IPEndPoint,并且我在客户端执行相同的操作。当运行在服务器和客户端,我使用尝试捕捉和客户端返回它的异常喜欢这个
“的请求的地址是无效的上下文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 2013-03-20 03:34:34
我编辑了你的标题。请参见“[应的问题包括‘标签’,在他们的头衔?(http://meta.stackexchange.com/questions/19190/)”,这里的共识是“不,他们不应该”。 – 2013-03-20 03:36:42
感谢您的答案乔,但即使我改变了IP它仍然给我错误,“连接失败,因为连接方没有正确响应或无法响应”,现在有什么问题? – Diom 2013-03-20 03:54:03