以聊天的交互方式为例,,注意要开两个VS,先运行服务端,,,
服务器代码:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
namespace _002_Stcket_UDP服务端
{
class Program
{
public static Socket udpServer;
static void Main(string[] args)
{
//1, 创建
udpServer = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
//2,绑定ip
udpServer.Bind(new IPEndPoint(IPAddress.Parse("192.168.1.11"), 3355));
//3,接收数据
//设为后台线程并且开启线程
Console.WriteLine("服务器开始成功:");
new Thread(ReceiveMessage) { IsBackground = true }.Start();
//关闭就无法无限接收数据
//udpServer.Close();
Console.ReadKey();
}
/// <summary>
/// 接收数据
/// </summary>
static void ReceiveMessage()
{
while (true) {
EndPoint remoteEndpoint = new IPEndPoint(IPAddress.Any, 0); //实例化一个空的ip:port
byte[] data = new byte[1024]; //接收字符的数组
//此方法,会把数据的来源(Ip+端口号)放到第二个参数上
int length = udpServer.ReceiveFrom(data, ref remoteEndpoint);
string message = Encoding.UTF8.GetString(data,0,length);
Console.WriteLine("从ip" + (remoteEndpoint as IPEndPoint).Address + ":" + (remoteEndpoint as IPEndPoint).Port + "接收数据: "+ message);
}
}
}
}
客户端代码:
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
namespace _002_Socet_DUP客户端
{
class Program
{
static void Main(string[] args)
{
//创建Scoket (不用刻意记住,都是枚举,根据构造函数选取需要的就行了)
Socket udpClient = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
while (true)
{
//发送数据 SendTo(要发消息转换的字节数组,端口号和ip地址)
EndPoint severEndpoint = new IPEndPoint(IPAddress.Parse("192.168.1.11"), 3355);
string message = Console.ReadLine();
byte[] data = Encoding.UTF8.GetBytes(message);
udpClient.SendTo(data, severEndpoint);
Console.WriteLine("消息已发出,输入p退出:--------");
if (message == "p")
{
break;
}
}
udpClient.Close();
Console.ReadKey();
}
}
}
运行示例: