113 lines
2.9 KiB
C#
113 lines
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));
|
||
}
|
||
}
|
||
} |