C#多进程与网络通信

发布时间:2024-09-13 16:32:54 作者:小樊
来源:亿速云 阅读:79

在C#中,可以使用多进程和网络通信来实现并行处理和数据传输。这里是一个简单的示例,展示了如何在C#中使用多进程和网络通信。

首先,我们需要创建一个TCP服务器,用于监听客户端连接和接收数据。以下是一个简单的TCP服务器示例:

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;

class TcpServer
{
    private TcpListener _listener;

    public TcpServer(int port)
    {
        _listener = new TcpListener(IPAddress.Any, port);
    }

    public void Start()
    {
        _listener.Start();
        Console.WriteLine("Server started.");

        while (true)
        {
            var client = _listener.AcceptTcpClient();
            Console.WriteLine("Client connected.");

            var thread = new Thread(HandleClient);
            thread.Start(client);
        }
    }

    private void HandleClient(object obj)
    {
        var client = (TcpClient)obj;
        var stream = client.GetStream();
        var buffer = new byte[1024];

        while (true)
        {
            var bytesRead = stream.Read(buffer, 0, buffer.Length);
            if (bytesRead == 0) break;

            var data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"Received: {data}");
        }

        client.Close();
        Console.WriteLine("Client disconnected.");
    }
}

接下来,我们需要创建一个TCP客户端,用于连接到服务器并发送数据。以下是一个简单的TCP客户端示例:

using System;
using System.Net.Sockets;
using System.Text;

class TcpClient
{
    private TcpClient _client;

    public TcpClient(string host, int port)
    {
        _client = new TcpClient(host, port);
    }

    public void SendData(string data)
    {
        var stream = _client.GetStream();
        var buffer = Encoding.UTF8.GetBytes(data);
        stream.Write(buffer, 0, buffer.Length);
    }
}

现在,我们可以创建一个多进程应用程序,其中一个进程作为服务器,另一个进程作为客户端。以下是一个简单的多进程示例:

using System;
using System.Diagnostics;

class Program
{
    static void Main(string[] args)
    {
        if (args.Length == 0)
        {
            // 启动服务器进程
            var serverProcess = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "dotnet",
                    Arguments = $"{typeof(Program).Assembly.Location} server",
                    UseShellExecute = false,
                    CreateNoWindow = true
                }
            };
            serverProcess.Start();

            // 启动客户端进程
            var clientProcess = new Process
            {
                StartInfo = new ProcessStartInfo
                {
                    FileName = "dotnet",
                    Arguments = $"{typeof(Program).Assembly.Location} client",
                    UseShellExecute = false,
                    CreateNoWindow = true
                }
            };
            clientProcess.Start();

            serverProcess.WaitForExit();
            clientProcess.WaitForExit();
        }
        else if (args[0] == "server")
        {
            var server = new TcpServer(12345);
            server.Start();
        }
        else if (args[0] == "client")
        {
            var client = new TcpClient("localhost", 12345);
            client.SendData("Hello from client!");
        }
    }
}

在这个示例中,我们首先检查命令行参数的数量。如果没有参数,我们启动服务器和客户端进程。如果有参数,我们根据参数值(“server"或"client”)来运行相应的代码。

这个示例展示了如何在C#中使用多进程和网络通信。你可以根据自己的需求修改这些代码,以实现更复杂的功能。

推荐阅读:
  1. Hibernate日志类别有哪些
  2. Hibernate中有哪些类型分类

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:多进程C#与GUI交互技巧

下一篇:C#多进程任务调度策略

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》