如何以适当的方式为简单的客户端消息设计服务器的类?此服务器使用事件模型通知父应用程序有关客户端请求。它使用异步套接字。服务器负载可能非常有限。
这就是我想要的:
class Client
{
private Socket sock;
public event EventHandler Start;
public event EventHandler Stop;
public event RequestEventHandler Request;
public Client(TcpClient Client)
//sock.BeginReceive
private void OnReceived(IAsyncResult ar)
//Dissect incoming stream into messages
//Call event handlers
//sock.BeginReceive
public void AnswerRequest(byte[] answer) //either this way or
private void OnSend(IAsyncResult ar) //direct call of sock.BeginSend
}
class Server
{
private TcpListener Listener;
public List<Client> Clients;
public event EventHandler ClientConnected;
public Server(int port)
//Listener.BeginAcceptTcpClient
private void AcceptTcpClientCallback(IAsyncResult ar)
//Get TcpClient
//Create new Client with TcpClient as a parameter
//Launch ClientConnected, where one should sign for Client events
//Listener.BeginAcceptTcpClient
}
答案 0 :(得分:0)
我正在使用nito异步库,它有simpleserversocket和简单的客户端。 非常好用。 Nito Async
答案 1 :(得分:0)
How would one design a class for server, which is managed by simple client messages,
in a proper way?
这取决于使用哪种I / O策略。与Winsock通信有几种不同的约定,每种方法都有明显的优点。
异步客户端套接字的类设计: 使用回调添加Stateobject。从客户端套接字读取数据需要一个在异步调用之间传递值的状态对象。
public class StateObject
{
public Socket workSocket = null;
public const int BufferSize = 256;
public byte[] buffer = new byte[BufferSize];
public StringBuilder sb = new StringBuilder();
}
来源:See msdn sample详细设计。