我一直在学习一些套接字编程,我创建了一个异步服务器,它只监听并返回数据。
但我在这里有一个问题,我在服务器上使用 IPEndPoint 和 IPEndPoint(IPAddress.any,port),我对客户端做同样的事情。运行服务器和客户端时,我使用 try catch 并且客户端返回它的异常,如下所示
“请求的地址在其上下文 0.0.0.0:port 中无效”
下面是代码:
服务器.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);
}
}
客户端.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);
}
}
我的问题是:
- 客户端是否需要指向一个 IPAddress?
- 我只是在服务器上使用了错误的代码吗?