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