113 行
2.9 KiB
C#
113 行
2.9 KiB
C#
#region << 版 本 注 释 >>
|
|
/*----------------------------------------------------------------
|
|
* 创建者:13118
|
|
* 创建时间:2022/6/15 16:42:09
|
|
* 版本:V1.0.0
|
|
* 描述:
|
|
*
|
|
* ----------------------------------------------------------------
|
|
* 修改人:
|
|
* 时间:
|
|
* 修改说明:
|
|
*
|
|
* 版本:V1.0.1
|
|
*----------------------------------------------------------------*/
|
|
#endregion << 版 本 注 释 >>
|
|
|
|
using Polly;
|
|
using Polly.Retry;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Net.Sockets;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
namespace ARI.EAP.HOST.Common
|
|
{
|
|
/// <summary>
|
|
/// SocketClient 的摘要说明
|
|
/// </summary>
|
|
public class SocketClient
|
|
{
|
|
private static Socket socket;
|
|
private Thread thread;
|
|
private byte[] buffer = new byte[2048];
|
|
private object sync_root = new object();
|
|
|
|
static SocketClient()
|
|
{
|
|
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
|
|
}
|
|
|
|
public SocketClient()
|
|
{
|
|
Task.Run(() => SocketConnect());
|
|
}
|
|
|
|
private void SocketConnect()
|
|
{
|
|
lock (sync_root)
|
|
{
|
|
RetryPolicy policy = Policy.Handle<SocketException>()
|
|
.WaitAndRetryForever(retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)), (ex, time) =>
|
|
{
|
|
});// 永远等待并重试,每次等待2的指数次冥的时间
|
|
policy.Execute(() =>
|
|
{
|
|
socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), int.Parse("10086")));
|
|
|
|
thread = new Thread(StartReceive);
|
|
thread.IsBackground = true;
|
|
thread.Start(socket);
|
|
});
|
|
}
|
|
}
|
|
|
|
private void StartReceive(object obj)
|
|
{
|
|
string str;
|
|
while (true)
|
|
{
|
|
Socket receiveSocket = obj as Socket;
|
|
try
|
|
{
|
|
int result = receiveSocket.Receive(buffer);
|
|
if (result == 0)
|
|
{
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
str = Encoding.Default.GetString(buffer);
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
}
|
|
|
|
public void Disconnected()
|
|
{
|
|
try
|
|
{
|
|
socket.Shutdown(SocketShutdown.Both);
|
|
socket.Close();
|
|
thread.Abort();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
public void SendMessage(string message)
|
|
{
|
|
socket.Send(Encoding.Default.GetBytes(message));
|
|
}
|
|
}
|
|
} |