发送设备的代码
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("消息已发送!");
}
接受设备的代码
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);
}
}
发送中文
使用Unicode编码对中文文本进行编码和解码。
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("消息已发送!");
}
接收中文
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);
}
}
}
循环发送消息
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("消息已发送!");
}
}
}
循环接收消息
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);
}
}
}
}
同时接收消息和发送消息
设备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;
}
}
}
}
设备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;
}
}
}
}
不同的字符编码
使用不同的编码,直接改Encoding的属性即可。
例如,下面的代码是把将字符串 message 使用 UTF-8 编码方式转换为字节数组 bytes。
byte[] bytes = Encoding.UTF8.GetBytes(message);