You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
using System; using System.Net; using System.Net.Sockets;
namespace Apewer.Network {
/// <summary>TCP 客户端。</summary>
public class TcpClient : IDisposable {
Socket _socket = null;
/// <summary>套接字实例。</summary>
public Socket Socket { get => _socket; }
/// <summary>本地终结点。</summary>
public IPEndPoint LocalEndPoint { get; private set; }
/// <summary>远程终结点。</summary>
public IPEndPoint RemoteEndPoint { get; private set; }
/// <summary>已连接。</summary>
public bool Connected { get => _socket != null && _socket.Connected; }
/// <summary>启动客户端,并连接到服务端。</summary>
public TcpClient(string ip, int port) : this(IPAddress.Parse(ip), port) { }
/// <summary>启动客户端,并连接到服务端。</summary>
public TcpClient(IPAddress address, int port) : this(new IPEndPoint(address, port)) { }
/// <summary>启动客户端,并连接到服务端。</summary>
public TcpClient(IPEndPoint endpoint) { _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); _socket.Connect(endpoint); _socket.SendTimeout = 5000; LocalEndPoint = _socket.LocalEndPoint as IPEndPoint; RemoteEndPoint = endpoint; }
/// <summary>关闭连接,释放系统资源。</summary>
public void Dispose() { try { _socket.Disconnect(false); } catch { } try { _socket.Close(100); } catch { } #if !NET20
try { _socket.Dispose(); } catch { } #endif
}
/// <summary>在线。</summary>
public bool Online { get => Extensions.Online(_socket); }
/// <summary>接收。</summary>
/// <exception cref="ArgumentNullException"></exception>
/// <exception cref="ArgumentOutOfRangeException"></exception>
/// <exception cref="SocketException"></exception>
/// <exception cref="ObjectDisposedException"></exception>
/// <exception cref="System.Security.SecurityException"></exception>
public byte[] Receive(int maxLength = 1024) => _socket.Receive(maxLength);
/// <summary>发送。</summary>
/// <exception cref="ArgumentNullException" />
/// <exception cref="SocketException" />
/// <exception cref="ObjectDisposedException" />
public void Send(byte[] data) => _socket.Send(data);
}
}
|