C# realizes the mutual transmission of messages between local area networks (under the same network)

Code for sending device

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

private const int Port = 8888;
private const string Device2IPAddress = "接收设备的IP地址";
static void Main(string[] args)
{
    
    
    Console.WriteLine("请输入一条消息:");
    string? message = Console.ReadLine();

#pragma warning disable CS8604 // 引用类型参数可能为 null。
    byte[] bytes = Encoding.ASCII.GetBytes(message);
#pragma warning restore CS8604 // 引用类型参数可能为 null。

    using (UdpClient client = new UdpClient())
    {
    
    
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(Device2IPAddress), Port);
        client.Send(bytes, bytes.Length, endPoint);
    }

    Console.WriteLine("消息已发送!");
}

Accept device code

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

private const int Port = 8888;

public static void Main(string[] args)
{
    
    
    using (UdpClient client = new UdpClient(Port))
    {
    
    
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, Port);
        byte[] bytes = client.Receive(ref endPoint);
        string message = Encoding.ASCII.GetString(bytes);
        
        Console.WriteLine("收到消息:");
        Console.WriteLine(message);
    }
}

Send in Chinese

Encode and decode Chinese text using Unicode encoding.

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

private const int Port = 8888;
private const string Device2IPAddress = "接收设备的IP地址";
static void Main(string[] args)
{
    
    
    Console.WriteLine("请输入一条消息:");
    string? message = Console.ReadLine();

#pragma warning disable CS8604 // 引用类型参数可能为 null。
    byte[] bytes = Encoding.Unicode.GetBytes(message);
#pragma warning restore CS8604 // 引用类型参数可能为 null。

    using (UdpClient client = new UdpClient())
    {
    
    
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(Device2IPAddress), Port);
        client.Send(bytes, bytes.Length, endPoint);
    }

    Console.WriteLine("消息已发送!");
}

receive chinese

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

public class Device2
{
    
    
    private const int Port = 8888;

    public static void Main(string[] args)
    {
    
    
        using (UdpClient client = new UdpClient(Port))
        {
    
    
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, Port);
            byte[] bytes = client.Receive(ref endPoint);
            string message = Encoding.Unicode.GetString(bytes);
            
            Console.WriteLine("收到消息:");
            Console.WriteLine(message);
        }
    }
}

Send messages in a loop

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

private constint Port = 8888;
private const string Device2IPAddress = "接收设备的IP地址";
static void Main(string[] args)
{
    
    
    using (UdpClient client = new UdpClient())
    {
    
    
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(Device2IPAddress), Port);

        while (true)
        {
    
    
            Console.WriteLine("请输入一条消息:");
            string? message = Console.ReadLine();

#pragma warning disable CS8604 // 引用类型参数可能为 null。
            byte[] bytes = Encoding.Unicode.GetBytes(message);
#pragma warning restore CS8604 // 引用类型参数可能为 null。
            client.Send(bytes, bytes.Length, endPoint);

            Console.WriteLine("消息已发送!");
        }
    }
}

Receive messages in loop

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

public class Device2
{
    
    
    private const int Port = 8888;

    public static void Main(string[] args)
    {
    
    
        using (UdpClient client = new UdpClient(Port))
        {
    
    
            IPEndPoint endPoint = new IPEndPoint(IPAddress.Any, Port);
            
            while (true)
            {
    
    
                byte[] bytes = client.Receive(ref endPoint);
                string message = Encoding.Unicode.GetString(bytes);
                
                Console.WriteLine("收到消息:");
                Console.WriteLine(message);
            }
        }
    }
}

Receive messages and send messages at the same time

Device 1

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

private const int Port = 8888;
private const string Device2IPAddress = "设备2的IP";
private const string Device1IPAddress = "设备1的IP";

static void Main(string[] args)
{
    
    
    using (UdpClient client = new UdpClient(Port))
    {
    
    
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(Device2IPAddress), Port);
        IPEndPoint device1EndPoint = new IPEndPoint(IPAddress.Parse(Device1IPAddress), Port);

        Console.WriteLine("已启动设备1。");

        // 开启接收消息的线程
        var receiveThread = new System.Threading.Thread(() =>
        {
    
    
            while (true)
            {
    
    
                Console.WriteLine("等待接收消息...");
                byte[] bytes = client.Receive(ref device1EndPoint);
                string receivedMessage = Encoding.Unicode.GetString(bytes);

                Console.WriteLine("收到的消息:");
                Console.WriteLine(receivedMessage);
            }
        });
        receiveThread.Start();

        while (true)
        {
    
    
            Console.WriteLine("请选择操作:");
            Console.WriteLine("1. 发送消息");
            Console.WriteLine("2. 退出");

            string input = Console.ReadLine();

            switch (input)
            {
    
    
                case "1":
                    Console.WriteLine("请输入一条消息:");
                    string message = Console.ReadLine();

                    byte[] bytes = Encoding.Unicode.GetBytes(message);
                    client.Send(bytes, bytes.Length, endPoint);

                    Console.WriteLine("消息已发送。");
                    break;
                case "2":
                    Console.WriteLine("设备1已退出。");
                    receiveThread.Abort();
                    return;
                default:
                    Console.WriteLine("无效的选择,请重新输入。");
                    break;
            }
        }
    }
}

Device 2

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

privateconst int Port = 8888;
private const string Device1IPAddress = "设备1的IP";
private const string Device2IPAddress = "设备2的IP";

public static void Main(string[] args)
{
    
    
    using (UdpClient client = new UdpClient(Port))
    {
    
    
        IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(Device1IPAddress), Port);
        IPEndPoint device2EndPoint = new IPEndPoint(IPAddress.Parse(Device2IPAddress), Port);

        Console.WriteLine("已启动设备2。");

        // 开启接收消息的线程
        var receiveThread = new System.Threading.Thread(() =>
        {
    
    
            while (true)
            {
    
    
                Console.WriteLine("等待接收消息...");
                byte[] bytes = client.Receive(ref device2EndPoint);
                string receivedMessage = Encoding.Unicode.GetString(bytes);

                Console.WriteLine("收到的消息:");
                Console.WriteLine(receivedMessage);
            }
        });
        receiveThread.Start();

        while (true)
        {
    
    
            Console.WriteLine("请选择操作:");
            Console.WriteLine("1. 发送消息");
            Console.WriteLine("2. 退出");

            string input = Console.ReadLine();

            switch (input)
            {
    
    
                case "1":
                    Console.WriteLine("请输入一条消息:");
                    string message = Console.ReadLine();

                    byte[] bytes = Encoding.Unicode.GetBytes(message);
                    client.Send(bytes, bytes.Length, endPoint);

                    Console.WriteLine("消息已发送。");
                    break;
                case "2":
                    Console.WriteLine("设备2已退出。");
                    receiveThread.Abort();
                    return;
                default:
                    Console.WriteLine("无效的选择,请重新输入。");
                    break;
            }
        }
    }
}

different character encodings

To use a different encoding, just change the Encoding property directly.

For example, the following code converts the string message into a byte array bytes using UTF-8 encoding.

byte[] bytes = Encoding.UTF8.GetBytes(message);

Guess you like

Origin blog.csdn.net/weixin_44499065/article/details/132311509