C#之UDP通信
简介
C#中的udp通信关键类:Udpclient,它位于命名空间System.Net.Sockets中,发送接收都是UdpClient类,
命名空间
using System.Net.Sockets;
using System.Net;
using System.Net.NetworkInformation;
using System.Management;
发送数据
1.Visual C# UdpClient类发送UDP数据包:
在具体使用中,一般分成二种情况:
(1).知道远程计算机IP地址:
"Send"方法的调用语法如下:
参数说明:
dgram 要发送的 UDP 数据文报(以字节数组表示)。
bytes 数据文报中的字节数。
endPoint 一个 IPEndPoint,它表示要将数据文报发送到的主机和端口。
返回值 已发送的字节数。
下面使用UdpClient发送UDP数据包的具体的调用例子:
(2).知道远程计算机名称:
知道远程计算机名称后,利用"Send"方法直接把UDP数据包发送到远程主机的指定端口号上了,这种调用方式也是最容易的,语法如下:
参数说明:
dgram 要发送的 UDP 数据文报(以字节数组表示)。
bytes 数据文报中的字节数。
hostname 要连接到的远程主机的名称。
port 要与其通讯的远程端口号。
返回值 已发送的字节数。
附上发送数据代码如下:
private void btnSend_Click(object sender, EventArgs e)
{
Thread t = new Thread(SendMsg);
t.IsBackground = true;
t.Start(sendText.Text);
}
private void SendMsg( object obj )
{
string message = (string)obj;
SendClient = new UdpClient(0);
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(message);
remoteIp = IPAddress.Parse(remoteIPBox.Text);
IPEndPoint iep = new IPEndPoint(remoteIp,portSend);
try
{
SendClient.Send(bytes, bytes.Length, iep);
AddItem(listBoxstatus, string.Format("向{0}发送:{1}", iep, message)); //异步委托显示数据
clearTextBox();
}
catch(Exception ex)
{
AddItem(listBoxstatus,"发送出错"+ex.Message);
}
}
接收数据
2.Visual C# UdpClient类接收UDP数据包:
接收UDP数据包使用的是UdpClient中的“Receive"方法。
参数说明:
remoteEP 是一个 IPEndPoint类的实例,它表示网络中发送此数据包的节点。
附上接收数据的代码如下:
private void FormChat_Load(object sender, EventArgs e)
{
//创建接收线程
Thread RecivceThread = new Thread(RecivceMsg);
RecivceThread.IsBackground = true;
RecivceThread.Start();
sendText.Focus();
}
private void RecivceMsg()
{
IPEndPoint local = new IPEndPoint(ip,portRecv);
RecviceClient = new UdpClient(local);
IPEndPoint remote = new IPEndPoint(IPAddress.Any, portSend);
while (true)
{
try
{
byte[] recivcedata = RecviceClient.Receive(ref remote);
string strMsg = Encoding.ASCII.GetString(recivcedata, 0, recivcedata.Length);
AddItem(listBoxRecv, string.Format("来自{0}:{1}", remote, strMsg));
}
catch
{
break;
}
}
}
细节注意
1、在Winfrom框架下,在多线程中进行控件操作,就需要使用异常委托方式解决。
2、使用同一台计算机进行调试,ip设置统一,即为:127.0.0.1,端口号不同。
总结
该文章简单对C#的UDP通讯进行一个讲解,简单入门可以,还有很多需要注意,比如需要加锁保护数据,使用队列等等方式对数据进行。再以后的文章中再补充。
C#之UDP通信的更多相关文章
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.4.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- HP-SOCKET TCP/UDP通信框架库解析
项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...
- .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)
上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- 高性能 TCP & UDP 通信框架 HP-Socket v3.2.2 正式发布
HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...
- [C语言]一个很实用的服务端和客户端进行UDP通信的实例
前段时间发了个TCP通信的例子,现在再来一个UDP通信的例子.这些可以作为样本程序,用到开发中.“裸写”socket老是记不住步骤,经常被鄙视…… 下面的例子很简单,写一个UDP的server用于收包 ...
随机推荐
- GIS之家小专栏
专栏简介:WebGIS开发者@GIS之家,一直混迹GIS行业,关注WebGIS开发方向,在本专栏中,分享WebGIS入门开发系列技术文章 核心内容: arcgis api 3.x for js开发系列 ...
- C++11新特性之tie、tuple的应用
//tuplestd::tuple<int, int, int, int, QString> Thorface::getUserInfoToJudgeOpendoor(QString st ...
- MongoDB通过Shell 实现集合的日常归档
1.MongoDB数据归档的意义 和其他类型的数据库一样,归档对MongoDB同样重要.通过归档,可以保持集合中合适的数据量,对数据库的性能是一种保障,也就是大家常说的数据冷热分离. 同时,归档对数据 ...
- Java遍历Map的4种方式
public static void main(String[] args) { // 循环遍历Map的4中方法 Map<Integer, Integer> map = new HashM ...
- spring集成shiro登陆流程(上)
上一篇已经分析了shiro的入口filter是SpringShiroFilter, 那么它的doFilter在哪儿呢? 我们看到它的直接父类AbstractShrioFilter继承了OncePerR ...
- Sublime Text2支持Vue语法高亮显示
1.下载vue语法高亮插件vue-syntax-highlight 下载地址:https://github.com/vuejs/vue-syntax-highlight 2.将vue-syntax-h ...
- load data infile
mysql> load data local infile 'd:/lw.txt' into table user (code,password,channelId);Query OK, 478 ...
- 【Netty】(4)—源码AbstractBootstrap
源码AbstractBootstrap 一.概念 AbstractBootstrap是一个工具类,用于服务器通道的一系列配置,绑定NioEventLoopGroup线程组,指定指定NIO的模式,指定子 ...
- 程序员也想改 Lottie 动画?是的!
一.前言 Hi,大家好,我是承香墨影! Lottie 是 Airbnb 开源的一套跨平台的完整的动画效果解决方案,用过都说好.完全解耦开发人员和设计师,让设计师设计的动画,在程序中无缝还原,真是一旦拿 ...
- 使用java语言,将字符串中连续重复出现的字母变成“出现次数“+字母的格式
今天在简书上看到这样一道有趣的算法题: 解题思路 首先定义一个变量element,默认是字符串的第一个字符.以element为基准元素,去判断某个字符是否重复.然后再去定义一个变量count去记录重复 ...