c#udp(接收和发送源码)源码完整
更新时间:2024-05-20 08:06:01 阅读量: 综合文库 文档下载
C#UDP(接收和发送源码)源码完整
最近做了一个UDP的服务接收和发送的东西。希望能对初学的朋友一点帮助。 源码如下:
一。逻辑--UdpServer.cs using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.Diagnostics; using System.Windows.Forms; using System.Collections.Generic; using System.Xml.Linq; using PitchServer.po;
namespace PitchServer.vo {
class UdpServer {
#region 构造方法
public UdpServer():this(50000,1024){} public UdpServer(ushort port):this(port,1024) {
_Port = port; }
public UdpServer(ushort port,uint bufferSize) {
_Port = port;
_bufferSize = bufferSize; }
#endregion #region 属性 ushort _Port = 50000; public ushort Port
{
get { return _Port; } }
uint _bufferSize = 1024; public uint BufferSize {
get{return _bufferSize;} }
bool m_IsRunning; public bool IsRunning {
get{return m_IsRunning;} }
public static Socket m_UdpServer { get; set; }
string Ip_Address = \ #endregion
Thread m_DataReceiveProcThread;
public static List
public delegate void OnReceivedDataHandler(object sender,DataReceivedEventArgs e); public event OnReceivedDataHandler OnRecivedData;
public delegate void OnStateChangedHandler(object sender,ServerStateChangeEventArgs e); public event OnStateChangedHandler OnStateChanged;
#endregion
void DataReceiveProc() {
while(m_IsRunning) { try
{
byte[] data = new byte[BufferSize]; m_UdpServer.Receive(data);
IPEndPoint ep = new IPEndPoint(IPAddress.Any, (int)Port); EndPoint senderRemote = (EndPoint)ep;
m_UdpServer.ReceiveFrom(data, ref senderRemote);
ep = (IPEndPoint)senderRemote; Ip_Address=ep.Address.ToString();
bool isexit = false;
for (int i = 0; i < IpAddress.Count; i++) {
if (Ip_Address == IpAddress[i].IPaddress) {
isexit = true; } } if (!isexit) {
Client cl = new Client(); cl.IPaddress = Ip_Address; cl.Port = ep.Port.ToString(); IpAddress.Add(cl); }
if(OnRecivedData != null)
OnRecivedData(this, new DataReceivedEventArgs(data, Ip_Address)); System.Threading.Thread.Sleep(100); }
catch(Exception ex) {
m_IsRunning = false; if(OnStateChanged != null)
OnStateChanged(this,new ServerStateChangeEventArgs(false)); throw ex; } } }
public void Stop() {
if(m_IsRunning) { try {
m_IsRunning = false; if(OnStateChanged != null)
OnStateChanged(this,new ServerStateChangeEventArgs(m_IsRunning)); m_UdpServer.Shutdown(SocketShutdown.Both); m_UdpServer.Close(); m_DataReceiveProcThread.Abort(); }
catch(Exception ex) {
Trace.WriteLine(ex.Message); } } }
public void Start() {
if(!m_IsRunning) { try {
m_UdpServer = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipep=new IPEndPoint(IPAddress.Any,(int)Port);
m_UdpServer.Bind(ipep); //
m_IsRunning
=
ThreadPool.QueueUserWorkItem(new
WaitCallback(DataReceiveProc));
m_DataReceiveProcThread = new Thread(new ThreadStart(DataReceiveProc)); m_DataReceiveProcThread.Start(); m_IsRunning = true; if(OnStateChanged != null)
OnStateChanged(this,new ServerStateChangeEventArgs(m_IsRunning)); }
catch(Exception ex) {
throw ex; } } }
~UdpServer() {
Stop(); } } }
二。前台调用: 开启服务:
UdpServer server = new UdpServer(ushort.Parse(textBox1.Text), 1024);//第一个参数为服务器IP,第二个为规定传输的大小
server.OnRecivedData += new UdpServer.OnReceivedDataHandler(recive); server.Start(); 接收数据的机制:
当客户端发送数据的时候会触发由UdpServer类里的m_DataReceiveProcThread线程接收并触发OnReceivedDataHandler事件,在前台要写这个事件的实现,如下: private void recive(object sender, EventArgs e) {
DataReceivedEventArgs DS = (DataReceivedEventArgs)e;
string reciveDate = System.Text.Encoding.UTF8.GetString(DS.Data);//把byte[]转换为 string }
对指定客户端发送数据: IPEndPoint
ip
=
new
IPEndPoint(IPAddress.Parse(cl.IPaddress),
Convert.ToInt32(cl.Port));//cl.IPaddress为客户端IP,cl.Port为客户端的端口
UdpServer.m_UdpServer.Connect(ip);//调用UdpServer的静态SOCKET对象m_UdpServer来连接客户端
UdpServer.m_UdpServer.Send(System.Text.Encoding.UTF8.GetBytes(message));//把要发送的字符串转换为BYTE[]然后发送出去,字符编码要看客户端的解释定义了。
正在阅读:
c#udp(接收和发送源码)源码完整05-20
本命年生日祝福语02-24
密室逃亡作文600字06-25
父亲节小学作文06-15
大工17秋《现代远程学习概论》在线作业101-25
premiere教案1108-28
2018最新入党积极分子思想汇报:完善人才建设机制07-08
汽车传动系11-18
寓言故事作文200字03-31
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 源码
- 接收
- 发送
- 完整
- udp
- 化学实验报告 实验__直接碘量法测定维生素C的含量
- 3、最新鄂教版三年级上册品社教案
- 白芍炮制
- 2013年全国重点名校分类汇编试题类汇编直线、圆、圆锥曲线
- 很黑很现实的大学攻略
- TDOA定位
- 2017 - 2018学年八年级语文上学期期末考试试题新人教版
- 通过LASSO回归压缩和选择
- 案例教学法在网络程序设计ASP课程中的应用-最新教育资料
- 中铝洛铜实习日记模板 - 图文
- 你越成熟,可以责怪的人就越少
- 材料作文“过往与现在”写作指导与示例
- A5监理工程师通知回复单
- 教师心理健康与压力管理
- 放心消费创建方案
- C职工工资管理系统报告
- 机械设计课程设计答辩时的题目
- 《人力资源管理》形考作业及答案(供参考)
- 8Aunit one练习题(牛津英语上海版)
- 2018届中考第二次(6月)模拟考试数学试题含答案