110,535
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace Asynchronous_TcpServer
{
class TcpServer_Async
{
static void Main(string[] args)
{
Socket serverSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
IPEndPoint serverIp = new IPEndPoint(IPAddress.Parse("127.0.0.1"),2020);
serverSocket.Bind(serverIp);
serverSocket.Listen(100);
Console.WriteLine("服务器开始异步监听...");
AsyncAccept(serverSocket);
Console.WriteLine("按任意键退出...");
Console.ReadKey();
}
private static void AsyncAccept(Socket serverSocket)
{
try
{
serverSocket.BeginAccept(asyncResult =>//①①①①①①①①①①①①①①
{
Socket clientSocket = serverSocket.EndAccept(asyncResult);
//AsyncSend(clientSocket,"连接成功");
AsyncReceive(clientSocket);
AsyncAccept(serverSocket);
}, null);
}
catch (Exception ex)
{
Console.WriteLine("出现异常:" + ex.Message);
}
}
private static void AsyncSend(Socket clientSocket, string msg)
{
try
{
byte[] buffer = Encoding.Default.GetBytes("服务器说:" + msg);
clientSocket.BeginSend(buffer, 0, buffer.Length, SocketFlags.None, asyncResult =>
{
clientSocket.EndSend(asyncResult);
}, null);
}
catch (Exception ex)
{
Console.WriteLine("出现异常:" + ex.Message);
}
}
private static void AsyncReceive(Socket clientSocket)
{
try
{
byte[] buffer = new byte[1024];
clientSocket.BeginReceive(buffer,0,buffer.Length,SocketFlags.None, asyncResult =>
{
clientSocket.EndReceive(asyncResult);
Console.WriteLine(Encoding.Default.GetString(buffer,0,buffer.Length));
AsyncReceive(clientSocket);
}, null);
}
catch (Exception ex)
{
Console.WriteLine("出现异常:" + ex.Message);
}
}
}
}
serverSocket.BeginAccept(MyProc, null);
public void MyProc(asyncResult)
{
Socket clientSocket = serverSocket.EndAccept(asyncResult);
AsyncReceive(clientSocket);
AsyncAccept(serverSocket);
}
这不过是把这个形式精简了,叫做匿名委托。
因此首先你要懂得“委托”的概念,然后才能懂得当“宿主”回调委托方法时的参数传送。public IAsyncResult BeginAccept (AsyncCallback callback,Object state)
Lambda好像和匿名方法差不多。 asyncResult是个形参。