分享

C# udp 通信 例子

 家住天地 2012-05-26

C# udp 通信 例子

大家好,这是我最近写了一个Udp通信的小程序,发表出来和大家共同学习,我希望和大家共同进步。

upd通信接受端:

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; }
}
}
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多