如何使用C构建一个简单的服务器?
- 行业动态
- 2025-01-26
- 2510
### C#实现简易服务器:该服务器基于C#语言开发,具备基本功能,如监听端口、接收和发送数据等,为网络编程初学者提供了学习和实践的基础。
在C#中创建一个简单的服务器,通常可以使用TcpListener或HttpListener类来实现,以下是使用这两种方式分别创建简单服务器的示例代码:
使用TcpListener创建TCP服务器
1、引入命名空间
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
2、创建服务器代码
“`csharp
class Program
{
static void Main(string[] args)
{
TcpListener server = null;
try
{
// 设置本地终端的相关属性
IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
int port = 12345;
server = new TcpListener(ipAddress, port);
// 开始监听是否有客户端连接
server.Start();
Console.WriteLine("等待客户端连接…");
while (true)
{
// 接受一个客户端的连接请求并返回一个新的socket实例
Socket client = server.AcceptSocket();
Console.WriteLine("一个客户端已连接!");
// 创建线程处理客户端请求
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));
clientThread.Start(client);
}
}
catch (SocketException e)
{
Console.WriteLine("SocketException: {0}", e);
}
finally
{
// 停止监听
server.Stop();
}
}
private static void HandleClientComm(object obj)
{
Socket client = (Socket)obj;
StringBuilder sb = new StringBuilder();
byte[] buffer = new byte[1024];
int iReceivedBytes;
while ((iReceivedBytes = client.Receive(buffer)) > 0)
{
// 将接收到的字节数组转换为字符串并添加到StringBuilder对象中
sb.Append(Encoding.UTF8.GetString(buffer, 0, iReceivedBytes));
}
string receivedString = sb.ToString();
Console.WriteLine("收到来自客户端的消息:" + receivedString);
string sendStr = "你好,客户端!";
byte[] sendData = Encoding.UTF8.GetBytes(sendStr);
client.Send(sendData, 0, sendData.Length, SocketFlags.None);
// 关闭客户端套接字
client.Shutdown(SocketShutdown.Both);
client.Close();
}
}
上述代码创建了一个TCP服务器,监听本机的12345端口,当有客户端连接时,会为每个客户端创建一个新线程来处理通信,服务器接收客户端发送的消息并回复“你好,客户端!”。 使用HttpListener创建HTTP服务器 1、引入命名空间 using System; using System.Net; using System.Text; using System.Threading; using System.Web; 2、创建服务器代码 ```csharp class Program { static void Main(string[] args) { HttpListener listener = new HttpListener(); listener.Prefixes.Add("http://localhost:8080/"); listener.Start(); Console.WriteLine("服务器启动,监听 http://localhost:8080/"); while (true) { HttpListenerContext context = listener.GetContext(); HttpListenerRequest request = context.Request; HttpListenerResponse response = context.Response; // 获取请求的URL和查询字符串参数 string url = request.RawUrl; string queryString = request.Url.Query; // 构建响应内容 string responseString = "Hello, this is a simple HTTP server!"; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString); response.ContentType = "text/plain"; response.ContentLength64 = buffer.Length; System.IO.Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); output.Close(); } } }
这段代码创建了一个简单的HTTP服务器,监听本地的8080端口,当接收到客户端请求时,服务器会返回一段简单的文本响应“Hello, this is a simple HTTP server!”。
相关问答FAQs
1、问:TcpListener和HttpListener创建的服务器有什么区别?
答:TcpListener创建的是TCP服务器,基于TCP协议进行数据传输,适用于需要持续连接、双向通信的场景,如即时通讯、远程控制等,而HttpListener创建的是HTTP服务器,基于HTTP协议,主要用于处理Web请求,如提供网页内容、处理表单提交等,通常是无状态的,客户端和服务器之间的通信是一次性的。
2、问:如何让创建的服务器能够处理多个客户端的同时连接?
答:对于TcpListener创建的TCP服务器,通过为每个接入的客户端连接创建一个新的线程(如上述代码中的Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClientComm));)来处理该客户端的请求,从而实现同时处理多个客户端连接,对于HttpListener创建的HTTP服务器,由于其本身是基于多线程模型设计的,可以自然地处理多个并发的HTTP请求,无需额外创建线程来处理每个请求。
本站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本站,有问题联系侵删!
本文链接:http://www.xixizhuji.com/fuzhu/399644.html