一个Udp通信的小程序
来源:互联网 发布:hexo 阿里云 编辑:程序博客网 时间:2024/05/21 03:59
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.Net.Sockets;
namespace Zhty.Socket.UDPSocket
{
public class UDP_Client
{
#region 属性
private IPAddress _ClientAddress = IPAddress.Any;
private int _ClientPort = 0;
private byte[] _data = new byte[] { };
public IPEndPoint Client
{
get { return new IPEndPoint(_ClientAddress, _ClientPort); }
set
{
_ClientAddress = value.Address;
_ClientPort = value.Port;
}
}
public IPAddress ClientAddress
{
get
{
return _ClientAddress;
}
set
{
_ClientAddress = value;
}
}
public int ClientPort
{
get { return _ClientPort; }
set { _ClientPort = value; }
}
#endregion
#region 方法
public void SendMessage(byte[] message)
{
//' Encode message per settings
// ' Send the message
_data = message;
try
{
SendUDPMessage(_data);
}
catch (Exception ex)
{ throw ex; }
}
private int SendUDPMessage(Byte[] _data)
{
//' Create a UDP Server and send the message, then clean up
UdpClient _UDPServer = null;
int ReturnCode;
try
{
_UDPServer = new UdpClient();
ReturnCode = 0;
_UDPServer.Connect(Client);
ReturnCode = _UDPServer.Send(_data, _data.Length);
}
catch (Exception ex)
{ throw ex; }
finally
{
if (_UDPServer != null)
{
_UDPServer.Close();
}
}
return ReturnCode;
}
#endregion
}
}
udp通信的发送端:
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Net.Sockets;
using System.Net;
namespace Zhty.Socket.UDPSocket
{
public class UDP_Server
{
private Thread _ThreadReceive;
private int _ClientPort = 0;
private string _Message = null;
private UdpClient _UDPClient;
private IPEndPoint _Server = new IPEndPoint(IPAddress.Any, 0);
private int _BytesReceived = 0;
#region 事件定义
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
#region 属性
int _bufferSize = 1024;
public int BufferSize
{
get { return _bufferSize; }
set { _bufferSize = value; }
}
public int BytesReceived
{
get { return _BytesReceived; }
}
public string Message
{
get { return _Message; }
}
public int ClientPort
{
get { return _ClientPort; }
set { _ClientPort = value; }
}
#endregion
#region 方法
void DataReceiveProc()
{
//BeforeReceive(this,new EventArgs());
_Message = "";
byte[] data = new byte[BufferSize];
try
{
data = _UDPClient.Receive(ref _Server);
if (OnRecivedData != null)
OnRecivedData(this, new DataReceivedEventArgs(data));
System.Threading.Thread.Sleep(100);
}
catch (Exception ex)
{
if (OnStateChanged != null)
OnStateChanged(this, new ServerStateChangeEventArgs(false));
throw ex;
}
finally {
InitializeThread();
}
}
private void InitializeClient()
{
if (_UDPClient == null)
{
this._UDPClient = new UdpClient(ClientPort);
}
}
private void InitializeThread()
{
try
{
_ThreadReceive = new Thread(new ThreadStart(DataReceiveProc));
_ThreadReceive.Start();
}
catch(Exception ex) {
throw ex;
}
}
public void Start()
{
InitializeClient();
InitializeThread();
}
#endregion
public void Stop()
{
try
{
_ThreadReceive.Abort();
if (_UDPClient != null)
{
// ' Close the UDPClient and then force it to Nothing
_UDPClient.Close();
_UDPClient = null;
}
}
catch (Exception ex)
{
throw ex;
}
}
#region 析构方法
~UDP_Server()
{
Stop();
}
#endregion
}
}
辅助类:
using System;
using System.Collections.Generic;
using System.Text;
namespace Zhty.Socket.UDPSocket
{
public class DataReceivedEventArgs : EventArgs
{
public DataReceivedEventArgs(byte[] data)
{
Data = data;
}
byte[] m_Data;
public byte[] Data
{
get { return m_Data; }
set { m_Data = value; }
}
}
public class ServerStateChangeEventArgs : EventArgs
{
public ServerStateChangeEventArgs(bool state)
{
Running = state;
}
bool m_Running;
public bool Running
{
get { return m_Running; }
set { m_Running = value; }
}
}
}
- 一个Udp通信的小程序
- 基于qt的一个udp通信小程序
- 基于QT的UDP协议的通信小程序
- java的UDP进行通信的一个小案例
- Python中网络UDP通信的一个小例子
- Java 网络 UDP 一个局域网下的聊天小程序
- 于udp通信的一点小总结
- 【tcp-ip学习总结】基础UDP实现的简单通信功能小程序
- 基于qt的一个tcp通信小程序
- 采用C++的ACE库实现的一个通用的udp通信服务器程序
- VC++编写的Socket udp通信程序
- C#的UDP广播通信程序示例
- UDP通信的简单实现(程序)
- 基于UDP的多线程网络通信程序
- 非常简单的UDP通信程序,C#
- c++通信---最简单的UDP程序
- 一个关于UDP通信端口的问题
- 一个最简单的UDP通信
- 走向绝境的现代社会
- zoj 1657 hash、、、
- 中文乱码问题及其解决方法
- 线性时间选择 5元组选中位数法
- SL400插上电源适配器后就断网的问题处理
- 一个Udp通信的小程序
- ubuntu环境下编译内核step by step
- 如何通过maven创建基于eclipse的web应用
- 最近在建模,顺便汉化一个软件玩玩
- MyGUI3.0.1支持中文输入
- scanf中的%[^]%*c格式
- AfxMessageBox弹出的对话框时,关闭父窗口的父窗口引起的问题。
- 以前的那种模式没了。下面的路要靠自己走了。
- 参考CSDN博客列表