SCLS/SSWCS_JXDL(2019)/SocketsUDP/CClientUDP.cs
2025-05-19 09:45:29 +08:00

222 lines
7.1 KiB
C#
Raw Blame History

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