UDP不属于面向连接的通信,在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人十分不满意的环境下,UDP协议数据包丢失会比较严重。但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。
我们通过UDP进行信息收发的时候,没有严格客户端和服务端的区别,它不同于UDP,UDP 必须建立可靠连接之后才可以通信,而UDP随时都可以给指定的ip和端口所对应进程发送消息。UDP发送消息时需要绑定自己IP 和 端口号,接收消息的时候没有特殊限制,只要有人给自己发送,自己在线,就可以接收。

(网上例子很多,但是总有一点地方看不懂。下面附上我的小例子,仅供参考。)

发送端:

 using System;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net; namespace client
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} //初始化一个UdpClient的新实例
UdpClient sendUdpClient = new UdpClient(); //单击事件
private void btn_send_Click(object sender, EventArgs e)
{
string message = txt_sendmsg.Text; if(string.IsNullOrEmpty(message))
{
MessageBox.Show("发送内容不能为空!");
txt_sendmsg.Focus();
return;
} //用指定IP地址和端口号初始化IPEndPoint类的新实例
IPEndPoint local = new IPEndPoint(IPAddress.Parse("127.0.0.1"), ); //将数据报发送至指定主机
sendUdpClient.Send(Encoding.UTF8.GetBytes(message), message.Length, local); }
}
}

接收端:

 using System;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.Threading; namespace server
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void Form1_Load(object sender, EventArgs e)
{
//初始化新线程用来接收消息
Thread myThread = new Thread(ReceiveMsg); //设为后台线程
myThread.IsBackground = true; //开启线程
myThread.Start();
} private UdpClient receiveUdpClient; private const int port = ; IPAddress ip = IPAddress.Parse("127.0.0.1"); //接收消息
private void ReceiveMsg()
{
//用指定IP地址和端口号初始化IPEndPoint类的新实例
IPEndPoint local = new IPEndPoint(ip, port); //初始化一个UdpClient的新实例并绑定到本地
receiveUdpClient = new UdpClient(local); while(true)
{
try
{
//返回由主机发来的数据报
byte[] receiveBytes = receiveUdpClient.Receive(ref local); string receivemsg = Encoding.UTF8.GetString(receiveBytes, , receiveBytes.Length);
ShowMessage(lst_receivemsg, receivemsg);
}
catch
{
break;
}
}
} // 通过委托回调机制显示消息内容
delegate void ShowMessageDelegate(ListBox listbox, string text); private void ShowMessage(ListBox listbox, string text)
{
//如果控件的 Handle 是在与调用线程不同的线程上创建的(此时,您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false。
//如果从另一个线程调用控件的方法,那么必须使用控件的一个 Invoke 方法来将调用封送到适当的线程。
if (listbox.InvokeRequired)
{
ShowMessageDelegate d = ShowMessage;
listbox.Invoke(d, new object[] { listbox, text });
}
else
{
listbox.Items.Add(text);
}
}
}
}

基于C#的UDP通信(使用UdpClient实现,包含发送端和接收端)的更多相关文章

  1. .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)

    上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...

  2. java实现udp发送端和接收端

    发送端: package demo02; import java.io.IOException; import java.net.DatagramPacket; import java.net.Dat ...

  3. Udp发送端和接收端

    //UdpReceive.java /* 定义udp的接收端. 思路: 1.定义udpSocket服务.一般会监听一个端口,事实上就是这个接收网络应用程序定义一个数字标示. 2.定义一个数据包.用来存 ...

  4. 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  5. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  6. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式发布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  7. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式宣布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件.广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

  8. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式公布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

  9. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3 正式公布

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包括服务端组件.client组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#. ...

随机推荐

  1. js冒泡排序及计算其运行时间

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  2. C++ 头文件系列(iterator)

    简介 该头文件围绕迭代器展开,定义了一系列与迭代器有关的概念,但最最最重要的一点就是----它和其它容器一起实现了C++容器的Iterator设计模式. Iterators are a general ...

  3. js精要之函数

    数组排序 ,,,,,]; arr.sort(function(a,b){ return a-b; }); console.log(arr); arguments 参数存储对象 function ref ...

  4. HTML5 & CSS3 初学者指南(4) – Canvas使用

    介绍 传统的HTML主要用于文本的创建,可以通过<img>标签插入图像,动画的实现则需要第三方插件.在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力.HTML5的到来,带来了新 ...

  5. 面试之MySQL基本命令

    既然要操作数据库就从数据库链接写起,包括建库.建表.增删该查字段及约束,删库,删表的数据,以下主要是对我以往面试的总结,欢迎补充! 一.数据库连接 1.连接本机(p和密码123456之间无空格) my ...

  6. MVC - 云服务器部署

    本章将和大家分享的是如果在云服务器上部署mvc,云服务器部署其实也不高大上,就和咋们在自己电脑上用iis发布部署站点一样,只是需要使用云解析把自己购买的域名解析到对应的自己的云服务器上,这些都是用的云 ...

  7. java-6数组

    一. 请编写一个程序将一个整数转换为汉字读法字符串.比如"1123"转换为"一千一百二十三".更进一步,能否将数字表示的金额改为"汉字表达?比如将&q ...

  8. IE中使用ajaxSubmit上传文件弹出下载提示框

    使用jQuery的ajaxSubmit 上传文件时,在IE中会弹出下载提示框: 解决方法:让action返回String类型,而不是ActionView,

  9. 2017年2月22日-----------乱码新手自学.net 之Entity Framework 增删改

    由于我是自学的,没有人教,在网上查资料也查不到个所以然.问大神们也是爱理不理的. 所以这篇随笔纯粹源自于我自己的认识.是否真正正确我也没有把握. 如果有什么错误,请大神们给予指正 ========== ...

  10. WP8.1程序开发,可视树VisualTreeHelper类的使用

    对于可视树的使用,很久之前就接触了, 一方面当时知识太浅根本看不懂,就放下没看了: 另一方面,也没用到,就没往这方面努力研究学习: 现在好了,遇到问题了,正好涉及到VisualTreeHelper的使 ...