服务器
namespace Udp服务器
{
class Program
{
static void Main(string[] args)
{
开始监听();
Console.ReadLine();
}
static void 开始监听()
{
UdpClient udpServer = new UdpClient(6666);
IPEndPoint ip终端 = null;
try
{
while(true)
{
Console.WriteLine("等待接受...");
byte[] 获取字节s = udpServer.Receive(ref ip终端);//接受数据.ref接受的是发送端的ip以及端口
Console.WriteLine("ip终端:" + ip终端.ToString());//自身的
string 获取str = Encoding.Unicode.GetString(获取字节s, 0, 获取字节s.Length);
Console.WriteLine("接受到信息:{0}", 获取str);
//收到消息"quit"时,跳出循环
if (获取str == "quit") break;
//想客户端会送消息
string sendString = "你好. 服务端";
Console.WriteLine("发送信息{0}" , sendString);
byte[] sendBytes = Encoding.Unicode.GetBytes(sendString);
udpServer.Send(sendBytes, sendBytes.Length, "127.0.0.1", 7777);//目标ip和端口
}
udpServer.Close();
Console.WriteLine("对方已经退出,按回车结束");
}
catch(Exception a)
{
Console.WriteLine(a.ToString());
}
}
}
}
客户端
namespace Udp客户端
{
class Program
{
static void Main(string[] args)
{
string 发送str = "我是客户端1";
Send(发送str);
Send("quit");
Console.ReadLine();
}
static void Send(string 消息)
{
UdpClient udpClient = new UdpClient(7777);
try
{
Console.WriteLine("想服务器发送数据:{0}", 消息);
byte[] 发送字节s = System.Text.Encoding.Unicode.GetBytes(消息);
udpClient.Send(发送字节s, 发送字节s.Length, "127.0.0.1", 6666);
if(消息=="quit")
{
Console.WriteLine("已经向对方发送quit信息, 请按回车键退出程序.");
return;
}
IPEndPoint 终端 = null;
byte[] 接受bytes = udpClient.Receive(ref 终端);//接受任意来自udpClient的舰艇的端口.就是创建的7777
Console.WriteLine("终端:" + 终端.ToString());//终端是自身的
string 获取str = System.Text.Encoding.Unicode.GetString(接受bytes);
Console.WriteLine("接受信息:{0}", 获取str);
udpClient.Close();
}
catch(Exception a)
{
Console.WriteLine(a.ToString());
}
}
}
}
发送广播信息和接受广播信息
namespace 广播程序设计实例
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
//IPEndPoint ip终端 = new IPEndPoint(IPAddress.Broadcast, 8000);//广播.//255.255.255.255:8000
IPEndPoint ip终端 = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8000);//广播
MessageBox.Show(ip终端.ToString());
//设置Broadcast值为表示允许套接字发送广播信息,改值默认为 不允许.
socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
byte[] 发送bytes = System.Text.Encoding.Unicode.GetBytes(textBox1.Text);
//向子网发送信息
socket.SendTo(发送bytes, ip终端);
socket.Close();
}
}
}
namespace 接受广播
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ip终端 = new IPEndPoint(IPAddress.Any, 8000);//any是0.0.0.0 接受任意ip发送的8000端口消息
MessageBox.Show(ip终端.ToString());
socket.Bind(ip终端);
EndPoint ep = (EndPoint)ip终端;
byte[] getBytes = new byte[1024];
while(true)
{
socket.ReceiveFrom(getBytes, ref ep);//接受到信息.并保存
string getData = System.Text.Encoding.Unicode.GetString(getBytes);
//注意不能胜率getData.TrimEnd'\u0000' 否则看不到后面信息
getData = getData.TrimEnd('\u0000') + "\n\n希望继续接受此类消息吗?\n";
MessageBox.Show(getData);
string message = "来自" + ep.ToString() + "的消息";//ep的端口是接受端口(随机数,不是8000)
MessageBox.Show(message);
break;
}
}
}
}
网友评论