工作需要用到UPD来设备通信,于是又开始学习这块的知识,首先,学习一个简单的入门程序。
界面如下:
先初始化后,可以给本机发送信息,随时接收
1.例子代码说明
初始化
Socket server;
public void InitSocket()
{
server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
server.Bind(new IPEndPoint(IPAddress.Parse(textBox1.Text), int.Parse(textBox2.Text)));//绑定端口号和IP
MessageBox.Show("服务端已经开启");
Thread t1 = new Thread(ReceiveMsg);//开启接收消息线程
t1.IsBackground = true;
t1.Start();
}
接收消息
用的while循环来实时获取,所以要记得用线程哦
public void ReceiveMsg()
{
while (true)
{
EndPoint port = new IPEndPoint(IPAddress.Any, 0);//得到发送方的ip和端口号
byte[] buffer = new byte[1024];
int length = server.ReceiveFrom(buffer, ref port);//接收数据报
string message = Encoding.UTF8.GetString(buffer, 0, length);//处理好的数据
this.Invoke((EventHandler)(delegate
{
richTextBox2.AppendText(port.ToString() +" :"+ message+"\r\n");
}));
}
}
发送消息
private void button1_Click(object sender, EventArgs e)
{
Thread t2 = new Thread(SendMsg);//开启发送消息线程
t2.IsBackground = true;
t2.Start();
}
/// <summary>
/// 向特定ip的主机的端口发送数据报
/// </summary>
public void SendMsg()
{
EndPoint port = new IPEndPoint(IPAddress.Parse(textBox4.Text), int.Parse(textBox3.Text));
string msg = "ss";
this.Invoke((EventHandler)(delegate
{
msg = richTextBox1.Text;
}));
server.SendTo(Encoding.UTF8.GetBytes(msg), port);
}
2.简单原理
网络传输协议有TCP和UDP两种,简单来说,就是用于不同设备间通过IP和端口号来通信。
**TCP:**客户端和服务器发送数据前需要“3次握手”连接,结束时使用“四次挥手”释放连接。
**UDP:**客户端在发送数据前无需与服务器端建立连接,即使服务器端不在线也可以发送,但是不能保证服务器端可以收到数据。