C#编程并实现网络UDP套接字

article/2025/4/27 21:18:51

文章目录

    • 一、UDP介绍
    • 二、C#命令行/控制台hello world程序
      • (一)创建项目
      • (二)客户端程序
      • (三)服务端程序
      • (四)使用wireshark抓包
    • 三、C#Form窗口程序
      • (一)创建项目
      • (二)客户端程序
      • (三)服务端程序
      • (四)wireshark抓包
    • 四、参考

一、UDP介绍

UDP是User Datagram Protocol的简称,中文名是用户数据报协议,是OSI参考模型中的传输层协议,它是一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

UDP的优势:
①开销更小
TCP为了保证其可靠性,首部包含20字节,以及40字节的可选项,UDP首部只有8字节;
②速度更快
UDP发送数据之前没有TCP的连接建立过程;
TCP提供了过多的保护,在及时性上做了很多的妥协,比如:控制微包(Nagle算法),延时ACK,流量控制,超时重传等,这些设计严重影响了Tcp的速度和及时性。

二、C#命令行/控制台hello world程序

(一)创建项目

选择控制台应用
在这里插入图片描述

(二)客户端程序

源代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.Net.Sockets;namespace UDPClient
{class Program{static void Main(string[] args){byte[] data = new byte[1024];string input;//构建TCP 服务器Console.WriteLine("这是客户端,请键入要发送的数据, 主机名为: {0}", Dns.GetHostName());//设置服务IP,设置TCP端口号IPEndPoint ip = new IPEndPoint(IPAddress.Parse("10.61.27.46"), 8000);//定义网络类型,数据连接类型和网络协议UDPSocket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);string welcome = "连接成功!";//字符串与字节数组相互转换data = Encoding.Default.GetBytes(welcome);//发送信息client.SendTo(data, ip);IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);EndPoint Remote = (EndPoint)sender;data = new byte[1024];//对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制//接受信息int recv = client.ReceiveFrom(data, ref Remote);//输出服务端ipConsole.WriteLine("消息发送到: {0}: ", Remote.ToString());//输出接受到的信息Console.WriteLine(Encoding.Default.GetString(data, 0, recv));while (true){//读取屏幕的字符串存入input中input = Console.ReadLine();if (input == "exit")break;//将input中的字符串发送至服务端for (int i = 0; i < 50; i++){client.SendTo(Encoding.Default.GetBytes(input), Remote);}/*data = new byte[1024];//将接受自服务端的信息存入recv中recv = client.ReceiveFrom(data, ref Remote);//将字节流转为字符串string Data = Encoding.Default.GetString(data, 0, recv);//将Date中的数据打印到屏幕上Console.WriteLine(Data);*/}//输入exit后,屏幕打印下列字符串Console.WriteLine("Stopping Client.");//关闭服务端client.Close();}}
}

结果如下:
在这里插入图片描述

(三)服务端程序

源代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;namespace UDP
{class Program{static void Main(string[] args){int recv;byte[] data = new byte[1024];//得到本机IP,设置TCP端口号         IPEndPoint ip = new IPEndPoint(IPAddress.Any, 8000);Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);//绑定网络地址server.Bind(ip);Console.WriteLine("这是客户端, 主机名为: {0}", Dns.GetHostName());//等待客户机连接Console.WriteLine("等待客户端发送数据...");//得到客户机IPIPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);EndPoint Remote = (EndPoint)(sender);recv = server.ReceiveFrom(data, ref Remote);Console.WriteLine("消息来自于: {0}: ", Remote.ToString());Console.WriteLine(Encoding.Default.GetString(data, 0, recv));//客户机连接成功后,发送信息string welcome = "连接成功 ";//字符串与字节数组相互转换data = Encoding.Default.GetBytes(welcome);//发送信息 server.SendTo(data, Remote);while (true){data = new byte[1024];//发送接收信息//从客户机接受消息recv = server.ReceiveFrom(data, ref Remote);//将字节流信息转换为字符串string Data = Encoding.Default.GetString(data, 0, recv);//将字符串输出到屏幕上Console.WriteLine(Data);// Console.WriteLine(Encoding.Default.GetString(data, 0, recv));/*//定义字符串inputstring input;//读取屏幕上的字符串input = Console.ReadLine();if (input == "exit")break;//将input发送至客户机server.SendTo(Encoding.Default.GetBytes(input),Remote);*/}server.Close();}}
}

结果为:

在这里插入图片描述

(四)使用wireshark抓包

发送数据时
在这里插入图片描述
这是我向舍友发送数据时抓到的包,可以见到源地址为10.61.131.59,这是我电脑的地址,目的地址为10.61.27.46,这是我舍友电脑的地址,端口为8000,数据为11字节,数据内容为hello world,协议为UDP。

接受数据:
在这里插入图片描述这是舍友抓到的包,源地址是我电脑的地址,目的地址是她电脑的地址,协议是UDP,端口为8000,内容为hello world,数据为11字节。

三、C#Form窗口程序

(一)创建项目

新建项目,选择Windows窗体应用。
在这里插入图片描述

(二)客户端程序

  1. 窗体设计
    在这里插入图片描述
  2. 代码部分
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net.Sockets;namespace demo
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){UdpClient udpSender = new UdpClient(0);udpSender.Connect("192.168.43.165", 8000);string message = textBox1.Text;byte[] sendBytes = Encoding.UTF8.GetBytes(message);udpSender.Send(sendBytes, sendBytes.Length);}private void label1_Click(object sender, EventArgs e){}}
}

最近电脑坏了,拿去修了,所以用的舍友的电脑。现在的IP是“192.168.43.205”,舍友的IP是“192.168.43.165”

运行结果:
在这里插入图片描述

(三)服务端程序

服务端程序用上面的就行,这里就不写了,接下来是运行结果
在这里插入图片描述
这是在舍友电脑上截到的图。

(四)wireshark抓包

客户端:
在这里插入图片描述
这是我抓到的包,源地址是192.168.43.205,目的地址是192.168.43.165,使用协议为UDP,端口号为8000,长度为11字节,数据内容为hello world.
服务端:

在这里插入图片描述
这是舍友抓到的包,源地址就是192.168.43.205,目的地址为192.168.43.165.内容为hello world,11字节,端口号为11,使用协议为UDP。

四、参考

  1. UDP简介
  2. 初识C#网络编程

http://chatgpt.dhexx.cn/article/fFxlp5e1.shtml

相关文章

Linux C语言高级

一、软件包管理及shell命令 1.流行的两种软件包管理机制 1.Deb软件包&#xff1a;由Debian Linux首先提出的软件包管理机制 2.RPM软件包&#xff1a;由Redhat Linux推出的软件包管理机制 2.Debian Linux开发了APT软件包管理器 1.检查和修复软件包依赖关系 2.利用Internet网络帮…

精心收集了60个C语言项目源码,分享给大家

C语言文章更新目录 C/C学习资源&#xff08;百度云盘链接&#xff09; 计算机二级资料&#xff08;过级专用&#xff09; C语言学习路线&#xff08;从入门到实战&#xff09; 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单…

python基于c语言开发_C高级编程:基于模块化设计思想的C语言开发 PDF 超清版

给大家带来的一篇关于C语言相关的电子书资源&#xff0c;介绍了关于C高级编程、模块化、设计思想、C语言开发方面的内容&#xff0c;本书是由机械工业出版社出版&#xff0c;格式为PDF&#xff0c;资源大小80 MB&#xff0c;吉星编写&#xff0c;目前豆瓣、亚马逊、当当、京东等…

【Linux】网络基础+UDP网络套接字编程

只做自己喜欢做的事情&#xff0c;不被社会和时代裹挟着前进&#xff0c;是一件很奢侈的事。 文章目录 一、 网络基础1.局域网和广域网2.协议初识和网络协议分层&#xff08;TCP/IP四层模型&#xff09;3.MAC地址和IP地址&#xff08;子网掩码&#xff0c;路由表&#xff0c;I…

C#使用TCP/UDP协议通信并用Wireshark抓包分析数据

目录 一、Wireshark抓包软件下载安装二、控制台程序使用 UDP 通信1&#xff09;创建新项目2&#xff09;编写代码3&#xff09;编译结果4&#xff09;抓包分析数据 三、Form窗口程序使用 TCP 通信1&#xff09;创建新项目2&#xff09;设计图形界面3&#xff09;编写代码4&…

SimpleFOC之ESP32(九)—— WIFI、UDP和TCP

目录 说明一、网络通信1.1、准备工作1.2、UDP通信1.3、TCP通信 二、硬件准备三、代码参考四、代码演示4.1、WIFI_AP模式UDP通信4.2、WIFI_STA模式TCP client通信 五、UDP通信控制电机5.1、硬件准备5.2、代码演示5.2.1、串口通信更改为UDP通信5.2.2、笔记本连接AP5.2.3、UDP发送…

如何进行网络编程(代码利用UDP socket实现)

目录 一、什么是网络编程&#xff1f; 二、那么在Java中能调用C语言的函数吗&#xff1f; 三、操作系统提供的socket API主要有两类&#xff08;实际上不止两类&#xff09; 1.流套接字&#xff08;底层使用TCP协议&#xff09; TCP协议的特点&#xff1a; 2.数据报套接字…

北斗系统学习—JT808协议用C语言解析

前言&#xff1a; 本人从事于Linux应用开发(音视频应用方向&#xff09;,现在主要是负者AI摄像头的开发&#xff0c;在学音视频的途中&#xff0c;虽然是个小白&#xff0c;但是更愿意把自己所学音视频的一些知识分享给大家&#xff0c;以后每周都会更新哦&#xff01; 本期介绍…

TCP/IP协议(一、自己动手实现udp)

对TCP/IP协议都只是听过&#xff0c;没有仔细研究过&#xff0c;一些知识体系也比较零散&#xff0c;什么三次握手&#xff0c;四次挥手&#xff0c;滑动窗口&#xff0c;零拷贝技术等等&#xff0c;都是知识有这么个东西&#xff0c;而不知道具体是啥&#xff0c;这几天还是根…

【Linux】传输层协议:UDP和TCP

但人不能永远浪漫下去&#xff0c;那会走向自我毁灭的。浪漫都是水字旁&#xff0c;会把人淹死的。人最终还是要进入一个规则体系&#xff0c;所谓&#xff0c;随心所欲不逾矩嘛 文章目录 一、UDP协议1.端口号2.理解UDP报头3.UDP的特点&#xff08;面向数据报&#xff0c;全双…

Linux网络:UDP协议 | TCP协议

文章目录 前言端口号netstat -- pidof UDP协议TCP协议三次握手 四次挥手确认应答(ACK)机制超时重传机制连接管理机制理解TIME_WAIT状态理解 CLOSE_WAIT 状态 滑动窗口流量控制拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结 基于TCP 和 UDP 的应用层协议TCP/UD…

C语言SOCKET编程指南

转载自&#xff1a;http://blog.sina.com.cn/s/blog_79b01f66010163q3.html 这篇文章完全可以作为c语言socket编程指南&#xff0c;无论在任何系统下。感谢作者fenglovel&#xff01; C语言SOCKET编程指南 1、介绍 Socket 编程让你沮丧吗&#xff1f;从man pages中很难得到有…

【socket】从计算机网络基础到socket编程——Windows Linux C语言 + Python实现(TCP+UDP)

一、部分基础知识1.1 计算机网络的体系结构1.11 互联网简介1.12 计算机网络的分类1.13 协议与网络的分层体系结构▶ 协议▶ 网络的分层体系结构 1.14 OSI 七层模型&#xff08;重要&#xff09;▶ OSI 模型的结构▶ OSI 模型各层的功能 1.15 TCP/IP 的体系结构&#xff08;重要…

C语言 C语言基础

C语言 C语言基础 一、简述 对于C语言基础相关方面的表面理解&#xff0c;简单介绍。 二、二进制 生活中常用的是十进制&#xff0c;基数0,1,2,3,4,5,6,7,8,9,。满10进1。 时钟60进制。基数0,1,2...57,58,59。满60进1。60秒为1分钟&#xff0c;60分钟为1小时。 计算机二进制&a…

炼一项专业技能c语言,C语言程序设计_安徽新华电脑专修学院

C语言程序设计&#xff0c;安徽新华电脑专修学院&#xff0c;2013年3月&#xff0c;在安徽省315国际消费者权益日纪念大会暨省消协四届三次理事会会议上&#xff0c;安徽新华电脑专修学院被省消费者协会授予“诚信单位”。 C语言程序设计&#xff0c; 并用c语言进行测试。还有b…

C++中使用UDP Socket发送字节数据

文章目录 参考代码结果展示 参考 这篇文章给的代码也能用 https://blog.csdn.net/qq_36437446/article/details/106446172 CRC代码来自https://blog.csdn.net/huijunma2010/article/details/124151471 在线计算CRC http://www.ip33.com/crc.html 代码 这里的byte是unsigned…

本机UDP收发性能测试

测试内容 测试单机版的UPD客户端和服务端之间的性能&#xff0c;UDP客户端发送数据到UDP服务端&#xff0c;并等待服务端返回&#xff0c;计算出UDP的性能 测试方法 客户端和服务端部署在同一台虚拟机器上&#xff0c;客户端启动多个线程&#xff0c;同时向服务端发送指定数量…

2020复旦大学计算机夏令营机试题

2020复旦大学计算机夏令营机试题 这个是开卷编程&#xff0c;不计入成绩&#xff0c;但是面试会问你做的情况。

复旦大学机试题题解(2017~2021)

前言 尝试把复旦大学历年的机试题做一遍&#xff0c;能做多少是多少了&#xff0c;因为没有数据集所以也不好确认是不是对的~&#xff08;题目来自王道往届学长学姐回忆以及某位热心的同学整理&#xff0c;如果了解来源后&#xff0c;我一定备注来源&#xff09; &#xff08;…

复旦大学:专硕没住宿?我们帮你建!还给补助!

去年&#xff0c;小编发过一篇文章&#xff0c;里面爆出了复旦大学等学校的专硕可能不提供住宿了&#xff1a; 北京大学 上海交通大学 复旦大学 专硕可能不提供住宿&#xff01; 后来&#xff0c;在复旦大学2019年招收攻读硕士学位研究生简章中&#xff0c;学校官方公布了不为专…