首先启动Visual Studio(以2017版为例):

新建一个点击新建一个项目

找到C#的Windows窗体应用项目,可以在下方更改项目名称和存储路径:

解决方案名称和.net框架默认的就可以

创建成功后:

首先在视图里面打开工具箱:

点击后就可以看到工具箱:

在控件中找到TextBox:

按住鼠标左键拖到Form窗体上

再拖出一个TextBox到窗体(方法如上)

然后拖出两个Label:

再拖出一个button

最后界面:

点击label1,在右下方的属性中找到Text属性,修改成“要发送的数据:”

再把label2的Text属性改为“接收到的数据:”

再点击其中一个TextBox:

从属性里找到Multiline属性,该属性默认False,点击该属性右边朝下箭头选择True:

再看界面上的TextBox,发现可以调整上下长度,自己根据喜好进行调整大小,然后布局一下:

再调整一下另一个TextBox的Multiline属性

最后布局:

最后还要修改一下button的Text属性,改成“发送”:

这样一个简单的界面就制作完成,接下来就是对界面编程了

双击窗体空白部分进入程序:

在Form1的构造函数上面添加:

static UdpClient udp = new UdpClient(8998);

这里创建一个Sockets端口号为8998   该端口是接收数据的端口可以自行更改

点击UdpClient,点击显示可能的修补程序,点击using System.Net.Sockets;

这样包含了Sockets的命名空间就不会再报错了

在Form1的构造函数内添加

 CheckForIllegalCrossThreadCalls = false;//在其他线程中可以调用主窗体控件

如图所示:

接下来创建一个线程:

 Thread js = new Thread(()=>
{});

这里可能Thread会报错,点开可能的修补程序:

选择 using System.Threading;  这样就不会报错了

在线程的构造函数里添加:   这是后面Receive方法所需要的参数

IPEndPoint ipendpoint = new IPEndPoint(IPAddress.Any, 8998); //创建IPEndPoint对象,用来显示响应主机的标识

可能IPEndPoint会显示错误 还是命名空间的问题 点击显示可能修补的程序添加命名空间即可

接下来就是接收消息过程:

while (true){try{if (udp.Available <= 0) continue;//判断是否有网络数据if (udp.Client == null) return;//判断连接是否为空//调用UdpClient对象的Receive方法获得从远程主机返回的UDP数据报byte[] bytes = udp.Receive(ref ipendpoint);//将获得的UDP数据报转换为字符串形式string str = Encoding.Default.GetString(bytes);//textBox2.Text = "正在接收的信息:\n" + str;//显示正在接收的数据textBox2.Text += "\n" + str;//显示接收的所有数据}catch (Exception ex){MessageBox.Show(ex.Message);//错误提示}Thread.Sleep(2000);//线程休眠2秒}

这里大家可以根据注释自己理解一下

在后面再添加一句: 开启线程

js.Start();

至此,接收部分的功能就已经实现:

接下来就是实现发送功能:

因为是要点击发送按钮才进行发送数据,所以我们在按键的点击事件函数中实现发送功能:

首先回到界面,双击Button按键进入Button的点击事件函数:

该函数会在Button被点击后系统调用

因为已经在创建了一个全局的UdpClient对象

所以在这里可以直接调用:

udp.Connect("127.0.0.1", 8888);

这个方法有点像是TCP的连接对方Sockets,参数输入对方的IP和端口

接下来就是发送数据了:

Thread fs = new Thread(() =>{while (true){try{if (textBox1.Text != null){Byte[] sendBytes = Encoding.Default.GetBytes(textBox1.Text);udp.Send(sendBytes, sendBytes.Length);}}catch{break;}}});fs.Start();

创建一个新线程  首先判断textBox里面是否有东西,如果有东西就对内容进行编码,然后使用Send发送出去

到这里就已经实现了发送和接收功能,我们运行试验一下结果:

结果是正确的

这里如果觉得接收数据显示的格式不好看可以在js线程的参数里进行修改

该程序只是简单实现UDP的数据收发,不是非常完善,有兴趣可以再添加两个TextBox来输入IP和端口,这样程序就更实用。

C#制作UDP协议可同时收发Winform窗体相关推荐

  1. 网络是怎样连接的-UDP协议的收发操作

    2.6 UDP 协议的收发操作 2.6.1 不需要重发的数据用 UDP 发送更高效 大多数的应用程序都像之前介绍的一样使用 TCP 协议来收发数据,但当然也有例外. 有些应用程序不使用 TCP 协议, ...

  2. UDP协议的收发操作

    大多数的应用程序都像之前介绍的一样使用TCP协议来收发数据,但当然也有例外.有些应用程序不使用TCP协议,而是使用UDP协议来收发数据.向DNS服务器查询IP地址的时候我们用的也是UDP协议.下面就简 ...

  3. 利用TCP/UDP 协议制作一个飞秋聊天工具

    视频操作演示: 利用TCP/UDP 协议制作一个飞秋聊天工具演示视频 int udp_broadcast(char const*argv[]) {//1.创建对象udp_socket = socket ...

  4. 用udp实现可靠传输python_一种基于UDP协议实时可靠图像传输方案的制作方法

    本发明设计属于数据传输与通信技术领域,具体涉及一种基于UDP协议(User Datagram Protocol)实时可靠图像传输方案. 背景技术: 随着网络技术的高速发展,无线数据传输在通信.控制等领 ...

  5. RAW 原始套接字 TCP UDP协议解析

    前言 公司的项目终于告一段落了,终于有时间了 - - leetcode 终于又可以 提上日程了 rust 驱动开发,也可以继续做了 kernel的驱动开发,也得继续进行了 驱动框架我又回来了 RFC ...

  6. TCP UDP 协议深度解析 (未完待续)

    前言 致歉 我打算将 TCP 的交互流程 通过抓包 和 代码演示下,ACK 和 SYNC 的 握手和回收过程,使用原始套接字进行分析 最近在忙Rust,元旦如果忙完Rust 的学习就搞一下 其实TCP ...

  7. 网络编程 socket模块 tcp协议 udp协议

    网络基础相关知识 , socket模块 , tcp协议通信代码 , tcp和udp编码流程 网络基础相关知识(1) 架构 C / S 架构: client 客户端 和 server 服务器端 优势:能 ...

  8. 传输层TCP/UDP协议

    可靠的TCP协议(传输层) 1)  TCP封包结构如下图: 各字段的含义为: 封包序号:记录每个封包的序号,当TCP封包大于IP封包的长度时,TCP封包就需要拆分成更小的包,来下发给网络层,通过该字段 ...

  9. Visual C++设计UDP协议通讯示例

    Visual C++设计UDP协议通讯示例 2005-06-06 15:56作者:fs007出处:vckbase责任编辑:方舟 下载本文源代码 一.绪言 UDP是一种面向非连接,不可靠的通讯协议,相对 ...

最新文章

  1. 脚本中的关于‘/xff‘字符记录
  2. Gradle task
  3. MySql的upsert操作
  4. java冒泡排序算法代码降序_冒泡排序(起泡排序)算法及其C语言实现
  5. 不能修改“System Roots”钥匙串
  6. (教学思路 c#之类一)声明类和对象、定义类成员及其引用
  7. 将Gatling集成到Gradle构建中–了解SourceSet和配置
  8. redis10--主从模式
  9. 风控必知必会|两大逻辑表五大基础报表
  10. onkeydown为什么会无限回调_为什么投资者总喜欢在股票下跌时买入?只有傻瓜才能在股市里挣钱...
  11. 关于header('location:url')的一些说明,php缓冲区
  12. 腾讯QQ for linux告别pre,开始beta
  13. Growth—电子书预览版
  14. 日记html模板,【精选】初二日记模板集锦7篇
  15. 网络能搜索计算机但不能连接不上,笔记本能搜到无线网络但连接不上怎么办
  16. 如何成为牛逼的程序员
  17. fastjson之@JSONField注解的几个的使用详细示范
  18. 区块链技术能否给跨境贸易带来新的机遇?
  19. debug模式启用浏览器
  20. 一个级数求和:看作二阶导,等比数列求和再求二阶导

热门文章

  1. java white case语句_JAVA基础(一)
  2. cadence allegro 之如何隐藏/显示单个DRC
  3. DRAG DROP
  4. android 头像球_【Android 界面效果44】Android之圆头像实例
  5. 存储器国产化为何选3D NAND作为突破口?
  6. DRAM战国时代 长江存储、联电、合肥长芯三大势力将对决
  7. idea怎样创建jsp文件
  8. 查询mysql数据库中各shema中的表数量【存储过程】
  9. 华大单片机HC32L130/HC32L136PWM配置
  10. 【03】品优购电商项目:00-品优购项目代码规范