C#的UDP广播通信程序示例
来源:互联网 发布:淘宝怎样删除评价记录 编辑:程序博客网 时间:2024/05/10 05:21
最近做的一个项目,其背景是应用在工业控制系统,软件的主要功能就是,在上位的PC机上,开发一个PLC控制器的管理软件,可以探测当前网络环境中,有多少个PLC控制器,每个控制器的IP地址是多少?
为了实现这样的一个探测的功能,很显然让我想到了采用广播通信的方式,来获取对侧PLC控制器的特定响应,从而接收相应的IP信息。具体的实现方案如下:
首先,PC侧向当前网络段,采用UDP广播通信的方式,发送探测命令报文,报文格式如下:
0x55ox010x00
PLC控制器,建立UDP报文的监听端口,一旦监测到如上述格式的报文命令,则向该报文的源端,发送确认回答信息,并将该控制器的IP信息打包发送。
在设计好实现方案后,具体的实现,就需要交给C#。由于本人以前对C#的网络编程不甚了解,所以就花了一此时间搜集相关的资料,来搜寻C#网络编程,特别是UDP通信的一些例程。C#的UDP通信,一般也分为服务器端与客户端,这里在网上找了一个例程,与大家共同学习。
服务器端:
using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;namespace UDPServer{ class Program { static void Main(string[] args) { int recv; byte[] data = new byte[1024]; //构建TCP 服务器 //得到本机IP,设置TCP端口号 IPEndPoint ipep = new IPEndPoint(IPAddress.Any , 8001); Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram , ProtocolType.Udp); //绑定网络地址 newsock.Bind(ipep); Console.WriteLine("This is a Server, host name is {0}",Dns.GetHostName()); //等待客户机连接 Console.WriteLine("Waiting for a client"); //得到客户机IP IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)(sender); recv = newsock.ReceiveFrom(data, ref Remote); Console .WriteLine ("Message received from {0}: ", Remote.ToString ()); Console .WriteLine (Encoding .ASCII .GetString (data ,0,recv )); //客户机连接成功后,发送欢迎信息 string welcome = "Welcome ! "; //字符串与字节数组相互转换 data = Encoding .ASCII .GetBytes (welcome ); //发送信息 newsock .SendTo (data ,data.Length ,SocketFlags .None ,Remote ); while (true ) { data =new byte [1024]; //发送接受信息 recv =newsock.ReceiveFrom(data ,ref Remote); Console .WriteLine (Encoding .ASCII .GetString (data ,0,recv)); newsock .SendTo (data ,recv ,SocketFlags .None ,Remote ); } } }}
客户端:
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 ,stringData; //构建TCP 服务器 Console.WriteLine("This is a Client, host name is {0}", Dns.GetHostName()); //设置服务IP,设置TCP端口号 IPEndPoint ipep = new IPEndPoint(IPAddress .Parse ("127.0.0.1") , 8001); //定义网络类型,数据连接类型和网络协议UDP Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); string welcome = "Hello! "; data = Encoding.ASCII.GetBytes(welcome); server.SendTo(data, data.Length, SocketFlags.None, ipep); IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); EndPoint Remote = (EndPoint)sender; data = new byte[1024]; //对于不存在的IP地址,加入此行代码后,可以在指定时间内解除阻塞模式限制 //server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 100); int recv = server.ReceiveFrom(data, ref Remote); Console.WriteLine("Message received from {0}: ", Remote.ToString()); Console.WriteLine(Encoding .ASCII .GetString (data,0,recv)); while (true) { input = Console .ReadLine (); if (input =="exit") break ; server .SendTo (Encoding .ASCII .GetBytes (input ),Remote ); data = new byte [1024]; recv = server.ReceiveFrom(data, ref Remote); stringData = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(stringData); } Console .WriteLine ("Stopping Client."); server .Close (); } }}
- C#的UDP广播通信程序示例
- C# UDP通信|C#的UDP通信|c# udp 广播
- vxWorks下的UDP通信程序--广播方式
- 非常简单的UDP通信程序,C#
- UDP实现的广播通信
- UDP广播程序的实现
- 一个VC简单的UDP广播示例
- C# 网络编程系列七:UDP编程补充——UDP广播程序的实现
- [C# 网络编程系列]专题七:UDP编程补充——UDP广播程序的实现
- 【C#网络编程系列】专题七:UDP编程补充——UDP广播程序的实现
- 16 UDP广播示例
- UDP广播通信
- linux UDP广播通信
- UDP广播通信
- 基于UDP协议的广播程序实例
- 一个简单的UDP广播程序
- Qt---基于UDP的网络广播程序
- C#实现UDP广播
- PHP Mongodb API 及使用
- android调试与内存泄漏
- Ubuntu 下使用了SSL VPN后访问内网其它IP的方法
- gridview如何添加一个自增的列
- wcf 配置
- C#的UDP广播通信程序示例
- 信号2笔记
- linux shutdown关不了机
- AJAX 的DragPanelExtender 拖曳控件使用,并保存位置(此方法思路可将坐标保存到数据库)
- 如何全选 s:iterator 中嵌套的 所有 s:checkbox
- IE中设置了document.domain后操作iframe的问题
- C++中多态要注意的事情&与Java的对比
- top命令详解
- dedecms 漏洞汇总