这里就为你详细讲解“C#基于Windows服务的聊天程序(1)”的完整攻略。
标题
介绍
本篇文章将讲解如何使用C#语言,基于Windows服务实现一个简单的聊天程序。我们将会逐步实现该程序,并解释每一步是如何完成的。
环境
在开始之前,需要满足以下环境:
- Windows操作系统
- Visual Studio开发环境
步骤
- 创建一个Windows服务项目
在Visual Studio中,创建一个新的Windows服务项目。
- 添加引用
在项目中添加以下引用:
- System.ServiceProcess
- System.Net.Sockets
-
System.Threading
-
编写服务代码
在服务项目中,找到Service1.cs文件并打开它。在OnStart方法中添加以下代码:
Thread t = new Thread(new ThreadStart(StartServer));
t.Start();
StartServer方法的实现如下:
private void StartServer()
{
try
{
TcpListener listener = new TcpListener(IPAddress.Any, 9999);
listener.Start();
while (true)
{
TcpClient client = listener.AcceptTcpClient();
Thread clientThread = new Thread(new ParameterizedThreadStart(HandleClient));
clientThread.Start(client);
}
}
catch (Exception ex)
{
// handle exception
}
}
HandleClient方法的实现如下:
private void HandleClient(object o)
{
TcpClient client = (TcpClient)o;
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[256];
StringBuilder messageData = new StringBuilder();
int bytesRead = 0;
do
{
bytesRead = stream.Read(buffer, 0, buffer.Length);
messageData.AppendFormat("{0}", Encoding.ASCII.GetString(buffer, 0, bytesRead));
}
while (stream.DataAvailable);
string message = messageData.ToString();
stream.Write(Encoding.ASCII.GetBytes("Message received!"), 0, 16);
// handle message
}
- 安装服务
在Visual Studio中,右键单击项目并选择“安装”。
- 启动服务
在Windows服务管理器中,找到刚刚安装的服务并启动它。
至此,一个简单的基于Windows服务的聊天程序就已经完成了。我们可以使用telnet命令测试它是否正常工作:
telnet localhost 9999
然后我们可以输入一些消息并发送给服务端,服务端将会接收到消息并回复“Message received!”。
示例说明
这里提供两个示例说明:
示例1:控制服务端口号
如果不想使用9999作为服务端口号,我们可以通过添加一个设置文件来让用户配置端口号。首先,在项目中添加一个名为App.config的设置文件,然后在其中添加以下内容:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="Port" value="9999"/>
</appSettings>
</configuration>
在服务端代码中,将9999替换为以下代码:
int port = int.Parse(ConfigurationManager.AppSettings["Port"]);
TcpListener listener = new TcpListener(IPAddress.Any, port);
现在,用户就可以通过修改配置文件来更改服务端口号。
示例2:客户端实现
我们可以编写一个简单的C#客户端程序来连接到这个服务。首先,创建一个新的控制台应用程序项目。然后添加以下引用:
- System.Net.Sockets
- System.Threading
在Main方法中添加以下代码:
TcpClient client = new TcpClient();
client.Connect("localhost", 9999);
NetworkStream stream = client.GetStream();
byte[] message = Encoding.ASCII.GetBytes("Hello, world!");
stream.Write(message, 0, message.Length);
byte[] buffer = new byte[256];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
Console.WriteLine(Encoding.ASCII.GetString(buffer, 0, bytesRead));
client.Close();
现在,我们可以运行客户端程序并将消息发送到服务端。服务端将会读取并处理消息,并回复“Message received!”。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基于Windows服务的聊天程序(1) - Python技术站