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