版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gzy11/article/details/78340944
好久没写东西了放点代码出来
,服务端是自己用nodejs写的先不放出来了。都是短连接,而非长连接,适用数据量传输比较小的情况下。
同一个项目中需要使用多个socket client 基础类 ,简单点就是配置在每个子类中重写了一下。
同一个项目中需要使用多个socket client 基础类 ,简单点就是配置在每个子类中重写了一下。
public class SocketClientBase
{
//#if DEBUG
// /// <summary>
// /// 日志服务器配置
// /// </summary>
// private static readonly string MonitorIP = "192.168.151.190";
// private static readonly int MonitorPort = 10100;
//#else
/// <summary>
/// IP
/// </summary>
public string IP { get; set; }// = ConfigurationManager.AppSettings["MonitorIP"];//192.168.151.190
public int Port { get; set; }// = int.Parse(ConfigurationManager.AppSettings["MonitorPort"]);//10100
IPAddress ip;
IPEndPoint ipEndPoint;
//#endif
public SocketClientBase()
{
}
private void CreateIPEndPoint()
{
ip = IPAddress.Parse(IP);
ipEndPoint = new IPEndPoint(ip, Port);
}
/// <summary>
/// 发送socket信息不获取服务器返回信息。
/// </summary>
/// <param name="data"></param>
public void SendMessage(string data)
{
CreateIPEndPoint();
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
try
{
socket.Connect(ipEndPoint);
if (socket.Connected)
{
byte[] bytes = Encoding.UTF8.GetBytes(data);
socket.Send(bytes, bytes.Length, 0); //发送信息
}
}
catch (Exception)
{
//throw;
}
finally
{
socket.Close();
/*
if (socket.Connected)
socket.Disconnect(true);
*/
}
}
}
/// <summary>
/// 发送socket信息,并获得返回信息。
/// </summary>
/// <param name="data"></param>
public string SendMessageResult(string data)
{
string result = null;
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp))
{
try
{
socket.Connect(ipEndPoint);
if (socket.Connected)
{
byte[] bytes = Encoding.UTF8.GetBytes(data);
socket.Send(bytes, bytes.Length, 0); //发送信息
byte[] resultBytes = new byte[1024];
int len = socket.Receive(resultBytes, resultBytes.Length, 0);
result = Encoding.UTF8.GetString(resultBytes, 0, len);
}
}
catch (Exception)
{
//throw;
}
finally
{
socket.Close();
/*
if (socket.Connected)
socket.Disconnect(true);
*/
}
}
return result;
}
}
实列1预警的socketClinet
namespace WNSLP.Toolkits.Common.Filter
public class SocketClient : WNSLP.Toolkits.Common.Sockets.SocketClientBase
{
/// <summary>
/// 服务器配置
/// </summary>
private static readonly string ConnectionIP = ConfigurationManager.AppSettings["MonitorIP"];//192.168.151.190
private static readonly int ConnectionPort = int.Parse(ConfigurationManager.AppSettings["MonitorPort"]);//10100
private static SocketClient instance;
public SocketClient()
{
}
public static SocketClient GetInstance()
{
if (instance == null)
{
instance = new SocketClient();
instance.IP = ConnectionIP;
instance.Port = ConnectionPort;
}
return instance;
}
}
实列2 Token的sockect 客户端
namespace WNSLP.Toolkits.Common.Token
public class SocketClient : WNSLP.Toolkits.Common.Sockets.SocketClientBase
{
/// <summary>
/// 服务器配置
/// </summary>
private static readonly string ConnectionIP = ConfigurationManager.AppSettings["TokenServerIP"];//192.168.151.190
private static readonly int ConnectionPort = int.Parse(ConfigurationManager.AppSettings["TokenServerPort"]);//10100
private static SocketClient instance;
public SocketClient()
{
}
public static SocketClient GetInstance()
{
if (instance == null)
{
instance = new SocketClient();
instance.IP = ConnectionIP;
instance.Port = ConnectionPort;
}
return instance;
}
}