222 lines
7.1 KiB
C#
222 lines
7.1 KiB
C#
using System;
|
||
using System.Collections.Generic;
|
||
using System.Text;
|
||
using System.Net;
|
||
using System.Net.Sockets;
|
||
using CommonClassLib;
|
||
namespace SocketsUDP
|
||
{
|
||
public static class CClientUDP
|
||
{
|
||
|
||
static Socket clientSocket=null;
|
||
static bool IfInit = false;
|
||
static byte[] _byteData = new byte[16];
|
||
static string _udpError;
|
||
static EndPoint _remoteServer;
|
||
static EndPoint _localServer;
|
||
public static EndPoint RemoteServer
|
||
{
|
||
get { return _remoteServer; }
|
||
set { _remoteServer = value; }
|
||
}
|
||
public static EndPoint LocalServer
|
||
{
|
||
get { return _localServer; }
|
||
set { _localServer = value; }
|
||
}
|
||
public static string UdpError
|
||
{
|
||
get { return _udpError; }
|
||
set { _udpError = value; }
|
||
}
|
||
public static byte[] ByteData
|
||
{
|
||
get { return _byteData; }
|
||
set { _byteData = value; }
|
||
}
|
||
public static void InitClientUDP(EndPoint localServer, EndPoint remoteServer)
|
||
{
|
||
try
|
||
{
|
||
_localServer = localServer;
|
||
_remoteServer = remoteServer;
|
||
//Using UDP sockets
|
||
if (clientSocket == null)
|
||
{
|
||
clientSocket = new Socket(AddressFamily.InterNetwork,
|
||
SocketType.Dgram, ProtocolType.Udp);
|
||
clientSocket.Bind(_localServer);//Login to the server
|
||
clientSocket.Connect(_remoteServer);
|
||
}
|
||
clientSocket.SendBufferSize = 1024;
|
||
clientSocket.ReceiveBufferSize = 1024;
|
||
|
||
IfInit = true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
clientSocket = null;
|
||
IfInit = false;
|
||
_udpError = ex.Message;
|
||
|
||
}
|
||
|
||
}
|
||
public static bool SendUdp(byte[] byteData)
|
||
{
|
||
try
|
||
{
|
||
if (IfInit == false)
|
||
{
|
||
InitClientUDP(_localServer, _remoteServer);
|
||
}
|
||
clientSocket.Send(byteData, 0, byteData.Length, SocketFlags.None);
|
||
CCarryConvert.WriteDarkCasket(" CClientUDP", "Send", _remoteServer.ToString(), byteData);
|
||
return true;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
IfInit = false;
|
||
UdpError = ex.Message;
|
||
return false;
|
||
}
|
||
}
|
||
public static bool SendUdp(string strData)
|
||
{
|
||
try
|
||
{
|
||
if (IfInit == false)
|
||
{
|
||
InitClientUDP(_localServer, _remoteServer);
|
||
}
|
||
byte[] byteData = Encoding.UTF8.GetBytes(strData);
|
||
clientSocket.Send(byteData, 0, byteData.Length, SocketFlags.None);
|
||
//CCarryConvert.WriteDarkCasket(" CClientUDP", "Send", _remoteServer.ToString(), byteData);
|
||
return true;
|
||
}
|
||
|
||
catch (Exception ex)
|
||
{
|
||
IfInit = false;
|
||
UdpError = ex.Message;
|
||
return false;
|
||
}
|
||
}
|
||
public static byte[] ReceiveUdp(string localip, int localport)
|
||
{
|
||
try
|
||
{
|
||
if (IfInit == false)
|
||
{
|
||
InitClientUDP(_localServer, _remoteServer);
|
||
}
|
||
EndPoint epSender;
|
||
if (_remoteServer == null)
|
||
{
|
||
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);//<2F><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κζ˿<CEB6>
|
||
//The epSender identifies the incoming clients
|
||
epSender = (EndPoint)ipeSender;
|
||
}
|
||
else
|
||
{
|
||
epSender = _remoteServer;
|
||
}
|
||
|
||
|
||
//Start receiving data
|
||
clientSocket.BeginReceiveFrom(_byteData, 0, _byteData.Length,
|
||
SocketFlags.None, ref epSender, new AsyncCallback(OnReceive), epSender);
|
||
//CCarryConvert.WriteDarkCasket(" CClientUDP", "BeginReceiveFrom", epSender.ToString(), _byteData);
|
||
|
||
return _byteData;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
IfInit = false;
|
||
_udpError = ex.Message;
|
||
return null;
|
||
}
|
||
}
|
||
public static byte[] ReceiveUdp()
|
||
{
|
||
try
|
||
{
|
||
if (IfInit == false)
|
||
{
|
||
InitClientUDP(_localServer, _remoteServer);
|
||
}
|
||
EndPoint epSender;
|
||
if (_remoteServer == null)
|
||
{
|
||
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);//<2F><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κζ˿<CEB6>
|
||
//The epSender identifies the incoming clients
|
||
epSender = (EndPoint)ipeSender;
|
||
}
|
||
else
|
||
{
|
||
epSender = _remoteServer;
|
||
}
|
||
|
||
|
||
//Start receiving data
|
||
clientSocket.BeginReceiveFrom(_byteData, 0, _byteData.Length,
|
||
SocketFlags.None, ref epSender, new AsyncCallback(OnReceive), epSender);
|
||
//CCarryConvert.WriteDarkCasket(" CClientUDP", "BeginReceiveFrom", epSender.ToString(), _byteData);
|
||
|
||
return _byteData;
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
IfInit = false;
|
||
_udpError = ex.Message;
|
||
return null;
|
||
}
|
||
}
|
||
private static void OnReceive(IAsyncResult ar)
|
||
{
|
||
try
|
||
{
|
||
|
||
EndPoint epSender;
|
||
if (_remoteServer == null)
|
||
{
|
||
IPEndPoint ipeSender = new IPEndPoint(IPAddress.Any, 0);//<2F><><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κζ˿<CEB6>
|
||
//The epSender identifies the incoming clients
|
||
epSender = (EndPoint)ipeSender;
|
||
}
|
||
else
|
||
{
|
||
epSender = _remoteServer;
|
||
}
|
||
clientSocket.EndReceiveFrom(ar, ref epSender);
|
||
|
||
clientSocket.BeginReceiveFrom(_byteData, 0, _byteData.Length,
|
||
SocketFlags.None, ref epSender, new AsyncCallback(OnReceive), epSender);
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
IfInit = false;
|
||
_udpError=ex.Message ;
|
||
}
|
||
}
|
||
public static void CloseUDP()
|
||
{
|
||
//if (clientSocket == null) return;
|
||
//if (clientSocket.Connected == true)
|
||
//{
|
||
// clientSocket.Shutdown(SocketShutdown.Both);
|
||
//}
|
||
//clientSocket.Close();
|
||
//if (clientSocket == null) return;
|
||
//if (clientSocket.Connected == true)
|
||
//{
|
||
// clientSocket.Shutdown(SocketShutdown.Both);
|
||
//}
|
||
//clientSocket.Close();
|
||
//IfInit = false;
|
||
}
|
||
|
||
}
|
||
}
|