| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Net;
 
- using System.Net.Sockets;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using Aitex.Core.RT.Log;
 
- namespace MECF.Framework.RT.Core.IoProviders
 
- {
 
-     class MCSocket
 
-     {
 
-         private int m_nPort;
 
-         private string m_strAddress;
 
-         private Socket m_socket;
 
-         private int m_nTimeOut;
 
-         public MCSocket()
 
-         {
 
-             m_nTimeOut = 30000;
 
-             //m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
-         }
 
-         ~MCSocket()
 
-         {
 
-         }
 
-         public bool Connected
 
-         {
 
-             get { return (m_socket != null && m_socket.Connected); }
 
-         }
 
-         public bool Open(string strAddress, int nPort, string strLocalAddress)
 
-         {
 
-             if (Connected)
 
-                 return true;
 
-             Close();
 
-             m_strAddress = strAddress;
 
-             m_nPort = nPort;
 
-             m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
 
-             try
 
-             {
 
-                 // Bind to specific local endpoint
 
-                 IPAddress localAddress = IPAddress.Parse(strLocalAddress);
 
-                 IPEndPoint localEndPoint = new IPEndPoint(localAddress, 0);
 
-                 m_socket.Bind(localEndPoint);
 
-                 IPAddress ipAddress = IPAddress.Parse(m_strAddress);
 
-                 IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, m_nPort);
 
-                 //m_socket = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
 
-                 m_socket.SendTimeout = m_nTimeOut;
 
-                 m_socket.ReceiveTimeout = m_nTimeOut;
 
-                 m_socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
 
-                 m_socket.Connect(ipEndPoint);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write(ex);
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         public bool Close()
 
-         {
 
-             if (m_socket == null) return true;
 
-             try
 
-             {
 
-                 m_socket.Shutdown(SocketShutdown.Both);
 
-                 m_socket.Close();
 
-                 m_socket = null;
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write(ex);
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         public bool Read(byte[] buffer)
 
-         {
 
-             if (!Connected) return false;
 
-             try
 
-             {
 
-                 m_socket.Receive(buffer);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write(ex);
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         public bool Read(byte[] buffer, int length)
 
-         {
 
-             if (!Connected) return false;
 
-             try
 
-             {
 
-                 if (length < 0) return false;
 
-                 m_socket.Receive(buffer, length, SocketFlags.None);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write($"Receive data failed, {ex.Message}, from {m_strAddress}:{m_nPort}");
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         public bool Write(byte[] buffer)
 
-         {
 
-             if (!Connected) return false;
 
-             try
 
-             {
 
-                 m_socket.Send(buffer, SocketFlags.None);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write(ex);
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-         public bool Write(byte[] buffer, int length)
 
-         {
 
-             if (!Connected) return false;
 
-             try
 
-             {
 
-                 m_socket.Send(buffer, length, SocketFlags.None);
 
-             }
 
-             catch (Exception ex)
 
-             {
 
-                 LOG.Write(ex);
 
-                 return false;
 
-             }
 
-             return true;
 
-         }
 
-     }
 
- }
 
 
  |