赞
踩
在C# WinForm程序中,可以使用多种方式实现程序之间的通信。以下列举了几种常见的方式:
5种方式对比:
1.网络通信
2.共享内存
3.进程间通信
4.文件映射
5.信号量
实例:
在网络通信中,我们可以使用Socket实现两个应用程序之间的通信。下面是一个简单的例子,展示了如何在C#中使用Socket进行网络通信。
服务端代码:
- using System;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
-
- namespace Server
- {
- class Program
- {
- static void Main(string[] args)
- {
- IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
- int port = 8080;
-
- TcpListener server = new TcpListener(ipAddress, port);
- server.Start();
-
- Console.WriteLine("Server started on port " + port);
-
- TcpClient client = server.AcceptTcpClient();
- Console.WriteLine("Client connected");
-
- NetworkStream stream = client.GetStream();
-
- byte[] buffer = new byte[1024];
- int bytes = stream.Read(buffer, 0, buffer.Length);
- string message = Encoding.ASCII.GetString(buffer, 0, bytes);
- Console.WriteLine("Received: " + message);
-
- byte[] response = Encoding.ASCII.GetBytes("Hello, client");
- stream.Write(response, 0, response.Length);
- Console.WriteLine("Sent: " + Encoding.ASCII.GetString(response));
-
- client.Close();
- server.Stop();
-
- Console.WriteLine("Server stopped");
- }
- }
- }
客户端代码:
- using System;
- using System.Net;
- using System.Net.Sockets;
- using System.Text;
-
- namespace Client
- {
- class Program
- {
- static void Main(string[] args)
- {
- IPAddress ipAddress = IPAddress.Parse("127.0.0.1");
- int port = 8080;
-
- TcpClient client = new TcpClient();
- client.Connect(ipAddress, port);
- Console.WriteLine("Connected to server");
-
- NetworkStream stream = client.GetStream();
-
- string message = "Hello, server";
- byte[] buffer = Encoding.ASCII.GetBytes(message);
- stream.Write(buffer, 0, buffer.Length);
- Console.WriteLine("Sent: " + message);
-
- buffer = new byte[1024];
- int bytes = stream.Read(buffer, 0, buffer.Length);
- message = Encoding.ASCII.GetString(buffer, 0, bytes);
- Console.WriteLine("Received: " + message);
-
- client.Close();
-
- Console.WriteLine("Client closed");
- }
- }
- }
下面是一个简单的例子,使用了C#的System.IO.MemoryMappedFiles类,创建了一个具有写权限的共享内存区域,并在该区域中写入了一个字符串。另一个进程可以读取该共享内存区域,并读取写入的字符串。
- // 创建一个具有写权限的共享内存区域,大小为1024字节
- using (var mmf = MemoryMappedFile.CreateNew("MySharedMemory", 1024, MemoryMappedFileAccess.ReadWrite))
- {
- // 在共享内存区域中创建一个内存映射视图,偏移量为0,大小为1024字节
- using (var view = mmf.CreateViewAccessor(0, 1024))
- {
- // 写入一个字符串到共享内存区域中
- byte[] data = Encoding.UTF8.GetBytes("Hello, Shared Memory!");
- view.WriteArray(0, data, 0, data.Length);
- }
- }
-
- // 打开共享内存区域,大小为1024字节
- using (var mmf = MemoryMappedFile.OpenExisting("MySharedMemory"))
- {
- // 在共享内存区域中创建一个内存映射视图,偏移量为0,大小为1024字节
- using (var view = mmf.CreateViewAccessor(0, 1024))
- {
- // 读取共享内存区域中的数据
- byte[] data = new byte[1024];
- view.ReadArray(0, data, 0, data.Length);
- string message = Encoding.UTF8.GetString(data);
- Console.WriteLine(message);
- }
- }
该代码创建了一个具有写权限的共享内存区域,大小为1024字节。然后,它在该共享内存区域中写入了一个字符串“Hello, Shared Memory!”。另一个进程可以读取该共享内存区域,并读取写入的字符串。注意,在打开共享内存区域时,需要使用相同的名称“MySharedMemory”。
这些都是实现程序之间通信的常见方式,具体选择哪种方式,需要根据实际情况进行选择。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。