using NetCoreServer; using System.Net.Sockets; namespace AppNetCoreServer { classEchoServer : TcpServer { publicEchoServer(string address, int port) : base(address, port){ } protected override TcpSession CreateSession(){ returnnew EchoSession(this); } protected override voidOnError(SocketError error) { Console.WriteLine($"Echo server caught an error with code {error}"); } } classEchoSession : TcpSession { publicEchoSession(TcpServer server) : base(server){ } protected override voidOnReceived(byte[] buffer, long offset, long size) { string message = System.Text.Encoding.UTF8.GetString(buffer, (int)offset, (int)size); Console.WriteLine("Incoming: " + message); SendAsync(message); } protected override voidOnError(SocketError error) { Console.WriteLine($"Echo session caught an error with code {error}"); } } internal classProgram { staticvoidMain(string[] args) { string address = "127.0.0.1"; int port = 3000; Console.WriteLine($"TCP server starting on port {port}..."); var server = new EchoServer(address, port); server.Start(); Console.WriteLine("Press Enter to stop the server or '!' to restart the server..."); for (; ; ) { string line = Console.ReadLine(); if (string.IsNullOrEmpty(line)) break; if (line == "!") { Console.Write("Server restarting..."); server.Restart(); Console.WriteLine("Done!"); } } Console.Write("Server stopping..."); server.Stop(); Console.WriteLine("Done!"); } } }
这个例子创建了一个简单的回显服务器,它会将接收到的任何消息发送回客户端。
HTTP服务器
NetCoreServer也支持创建HTTP服务器。以下是一个简单的HTTP服务器示例:
using NetCoreServer; using System.Net.Sockets; namespace AppNetCoreServer { classHttpServer : NetCoreServer.HttpServer { publicHttpServer(string address, int port) : base(address, port){ } protected override TcpSession CreateSession(){ returnnew HttpSession(this); } protected override voidOnError(SocketError error) { Console.WriteLine($"HTTP server caught an error with code {error}"); } } classHttpSession : NetCoreServer.HttpSession { publicHttpSession(NetCoreServer.HttpServer server) : base(server){ } protected override voidOnReceivedRequest(HttpRequest request) { Console.WriteLine($"Received request: {request.Method} {request.Url}"); // Respond with "Hello, World!" if (request.Method == "GET" && request.Url == "/") { var content = "Hello, World!"; var response = new HttpResponse(); response.SetBegin(200); response.SetBody(content); SendResponseAsync(response); } else { SendResponseAsync(Response.MakeErrorResponse()); } } protected override voidOnReceivedRequestError(HttpRequest request, string error) { Console.WriteLine($"Request error: {error}"); } protected override voidOnError(SocketError error) { Console.WriteLine($"HTTP session caught an error with code {error}"); } } internal classProgram { staticvoidMain(string[] args) { string address = "127.0.0.1"; int port = 8080; Console.WriteLine($"HTTP server starting on port {port}..."); var server = new HttpServer(address, port); server.Start(); Console.WriteLine("Press Enter to stop the server..."); Console.ReadLine(); Console.Write("Server stopping..."); server.Stop(); Console.WriteLine("Done!"); } } }
这个HTTP服务器会对根路径 ("/") 的GET请求响应 "Hello, World!"。
WebSocket服务器
NetCoreServer还支持WebSocket协议。以下是一个WebSocket服务器的示例:
using System; using System.Text; using NetCoreServer; classWebSocketServer : WsServer { publicWebSocketServer(string address, int port) : base(address, port){ } protected override TcpSession CreateSession(){ returnnew WebSocketSession(this); } protected override voidOnError(SocketError error) { Console.WriteLine($"WebSocket server caught an error with code {error}"); } } classWebSocketSession : WsSession { publicWebSocketSession(WsServer server) : base(server){ } public override voidOnWsConnected(HttpRequest request) { Console.WriteLine($"WebSocket session with Id {Id} connected!"); } public override voidOnWsDisconnected() { Console.WriteLine($"WebSocket session with Id {Id} disconnected!"); } public override voidOnWsReceived(byte[] buffer, long offset, long size) { string message = Encoding.UTF8.GetString(buffer, (int)offset, (int)size); Console.WriteLine($"Incoming: {message}"); SendTextAsync(message); } protected override voidOnError(SocketError error) { Console.WriteLine($"WebSocket session caught an error with code {error}"); } } classProgram { staticvoidMain(string[] args) { string address = "127.0.0.1"; int port = 8080; Console.WriteLine($"WebSocket server starting on port {port}..."); var server = new WebSocketServer(address, port); server.Start(); Console.WriteLine("Press Enter to stop the server..."); Console.ReadLine(); Console.Write("Server stopping..."); server.Stop(); Console.WriteLine("Done!"); } }
这个WebSocket服务器会将接收到的任何消息回显给客户端。
UDP服务器
NetCoreServer也支持UDP协议。以下是一个简单的UDP服务器示例:
using NetCoreServer; using System.Net; using System.Net.Sockets; using System.Text; namespace AppNetCoreServer { classEchoServer : UdpServer { publicEchoServer(IPAddress address, int port) : base(address, port){ } protected override voidOnStarted() { // Start receive datagrams ReceiveAsync(); } protected override voidOnReceived(EndPoint endpoint, byte[] buffer, long offset, long size) { Console.WriteLine("Incoming: " + Encoding.UTF8.GetString(buffer, (int)offset, (int)size)); // Echo the message back to the sender SendAsync(endpoint, buffer, 0, size); } protected override voidOnSent(EndPoint endpoint, long sent) { // Continue receive datagrams ReceiveAsync(); } protected override voidOnError(SocketError error) { Console.WriteLine($"Echo UDP server caught an error with code {error}"); } } classProgram { staticvoidMain(string[] args) { string address = "127.0.0.1"; int port = 3000; Console.WriteLine($"UDP server starting on port {port}..."); var server = new EchoServer(IPAddress.Parse(address), port); server.Start(); for (; ; ) { string line = Console.ReadLine(); if (string.IsNullOrEmpty(line)) break; // Restart the server if (line == "!") { Console.Write("Server restarting..."); server.Restart(); Console.WriteLine("Done!"); } } Console.WriteLine("Press Enter to stop the server..."); Console.ReadLine(); Console.Write("Server stopping..."); server.Stop(); Console.WriteLine("Done!"); } } }