c# 创建socket连接辅助类
标签:man param mes int end code ace col address getc
using AD.SocketForm.Model;
using NLog;
using System;
using System.Net;
using System.Net.Sockets;
namespace AD.SocketForm.Service
{
public class SocketService
{
private Logger _logger = LogManager.GetCurrentClassLogger();
///
/// 创建socket
///
///
///
public Socket Create(HubModel model)
{
try
{
// 将IP地址字符串转换为IPAddress对象
IPAddress ip = IPAddress.Parse(model.IP);
// 创建终结点EndPoint
IPEndPoint endPoint = new IPEndPoint(ip, model.Port);
// 创建Socket并连接到服务器
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 连接到服务器
socket.Connect(endPoint);
return socket;
}
catch (System.Exception ex)
{
_logger.Error(string.Format("获取socket异常,message:{0},stacktrace:{1}", ex.Message, ex.StackTrace));
}
return null;
}
///
/// 关闭socket
///
///
public void Close(Socket socket)
{
if (socket != null)
{
socket.Close();
socket = null;
}
}
///
/// 判断Socket是否已连接
///
///
///
public bool IsConnected(Socket socket)
{
if (socket == null || socket.Connected == false)
{
return false;
}
bool blockingState = socket.Blocking;
try
{
byte[] tmp = new byte[1];
socket.Blocking = false;
socket.Send(tmp, 0, 0);
return true;
}
catch (SocketException e)
{
// 产生 10035 == WSAEWOULDBLOCK 错误,说明被阻止了,但是还是连接的
if (e.NativeErrorCode.Equals(10035))
{
return true;
}
else
{
return false;
}
}
catch (Exception ex)
{
_logger.Error(string.Format("检查Socket是否可连接时异常,message:{0},stacktrace:{1}", ex.Message, ex.StackTrace));
return false;
}
finally
{
socket.Blocking = blockingState; // 恢复状态
}
}
}
}
c# 创建socket连接辅助类
标签:man param mes int end code ace col address getc
原文地址:https://www.cnblogs.com/subendong/p/11822923.html
评论