



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
今天稍花化了一点时间 利用 C 的 Socket 验证了 UDP 的通信 为接下来特地利用 UDP 做个分布式的通信仿真系统打下基础 众所周知 UDP 就是用户数据报协议 在互联网参 考模型的第四层 传输层 与 TCP 协议同层 都是提供信息的传输服务 但与 TCP 最 大区别就是 它是一种无连接不可靠的信息传输 什么是无连接不可靠 直白点讲就是 发送数据的时候 直接把 UDP 包往网络一扔就完事 了 接不接受收到发送的就不理了 接受数据的时候 有发给本地的 UDP 包就照单全收 收完再看是谁发的 相比 TCP 少了握手建立连接 维护连接 连接释放等一系列过程 因此具有很小的资源消耗和处理速度快的优点 好了说了一堆废话 开始讲怎么利用 C 中 Socket 进行 UDP 通信 TCP UDP 应用程序可 以通过 TCPClient TCPListener 和 UDPClient 类进行编程 而这些协议类也建立在 System Net Sockets Socket 类的基础上 并无需理会数据传送的细节 但为了更好地理解 Socket 编程 这里还是利用了 Socket 类进行 UDP 通信编程 UDP 应用上已经无严格意义上的真正的服务器和客户端之分了 端点之间都是平等的关系 因此进行通信只需编写一个程序即可 下面给出关键部分代码与说明 1 关键的全局变量 private IPEndPoint ipLocalPoint private EndPoint RemotePoint private Socket mySocket private bool RunningFlag false 2 获取本地 IP 的方法 private string getIPAddress 获得本机局域网 IP 地址 IPAddress AddressList Dns GetHostByName Dns GetHostName AddressList if AddressList Length 1 return return AddressList 0 ToString 3 IP 与端口号有效验证 private int getValidPort string port int lport 测试端口号是否有效 try 是否为空 if port throw new ArgumentException 端口号无效 不能启动 DUP lport System Convert ToInt32 port catch Exception e ArgumentException FormatException OverflowException Console WriteLine 无效的端口号 e ToString this tbMsg AppendText 无效的端口号 e ToString n return 1 return lport private IPAddress getValidIP string ip IPAddress lip null 测试 IP 是否有效 try 是否为空 if IPAddress TryParse ip out lip throw new ArgumentException IP 无效 不能启动 DUP catch Exception e ArgumentException FormatException OverflowException Console WriteLine 无效的 IP e ToString this tbMsg AppendText 无效的 IP e ToString n return null return lip 4 Socket 的配置 得到本机 IP 设置 UDP 端口号 ip getValidIP tbLocalIP Text port getValidPort tbLocalPort Text ipLocalPoint new IPEndPoint ip port 定义网络类型 数据连接类型和网络协议 UDP mySocket new Socket AddressFamily InterNetwork SocketType Dgram ProtocolType Udp 绑定网络地址 mySocket Bind ipLocalPoint 得到客户机 IP ip getValidIP tbRemoteIP Text port getValidPort tbRemotePort Text IPEndPoint ipep new IPEndPoint ip port RemotePoint EndPoint ipep 启动一个新的线程 执行方法 this ReceiveHandle 以便在一个独立的进程中执行数据接收的操作 RunningFlag true Thread thread new Thread new ThreadStart this ReceiveHandle thread Start SEO 5 接收线程 定义一个委托 public delegate void MyInvoke string strRecv private void ReceiveHandle 接收数据处理线程 string msg byte data new byte 1024 MyInvoke myI new MyInvoke UpdateMsgTextBox while RunningFlag if mySocket null mySocket Available 1 Thread Sleep 200 continue 跨线程调用控件 接收 UDP 数据报 引用参数 RemotePoint 获得源地址 int rlen mySocket ReceiveFrom data ref RemotePoint msg Encoding Default GetString data 0 rlen tbMsg BeginInvoke myI new object RemotePoint ToString msg private void btSend Click object sender EventArgs e string msg msg tbSendMsg Text 发送 UDP 数据包 byte data Encoding Default GetBytes msg mySocket SendTo data data Length SocketFlags None RemotePoint private void UpdateMsgTextBox string msg 接收数据显示 this tbM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025鄂尔多斯市绿能智联新能源有限公司招聘部分技术人员考前自测高频考点模拟试题完整答案详解
- 2025年中共南平市委党校紧缺急需专业教师招聘模拟试卷及参考答案详解
- 2025广西百色干部学院公开招聘教研人员3人模拟试卷及一套答案详解
- 2025杭州市钱塘区教育局所属事业单位在职教师直接考核招聘37人模拟试卷及一套完整答案详解
- 2025广西河池市产品质量检验所招聘1人模拟试卷及一套答案详解
- 2025江苏盐城市东台市人力资源和社会保障局招聘劳务派遣人员3人考前自测高频考点模拟试题及参考答案详解1套
- 2025安顺市参加“第十三届贵州人才博览会”引才1453人模拟试卷及答案详解(有一套)
- 2025年4月广西师范大学劳动合同制员工招聘2人考前自测高频考点模拟试题及参考答案详解
- 2025年泉州供电服务有限公司招聘64人模拟试卷及答案详解(有一套)
- 中信银行吕梁市孝义市2025秋招笔试行测高频题及答案
- DL∕T 2568-2022 电力行业数字化审计平台功能构件与技术要求
- 足太阳膀胱经(经络腧穴课件)
- 部编人教版《道德与法治》六年级上册第9课《知法守法 依法维权》精美课件(第1课时)
- 消防喷淋系统设计合同范本
- DB32-T 4757-2024 连栋塑料薄膜温室建造技术规范
- 2024年四川省广安市中考数学试题(含答案逐题解析)
- 山西省太原三十七中2023-2024学年九年级上学期月考物理试卷(10月份)
- (幻灯片)世界各国国旗大全中文
- 物流地产发展前景分析
- 三年个人成长路线图:高中数学名师工作室
- 子宫动脉栓塞护理查房
评论
0/150
提交评论