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