C# 套接字编程允许 2 个应用程序使用相同的套接字/TCP 连接

问题描述

我正在创建 c# 套接字应用程序和服务器端。 我需要创建一个 C# windows 服务,它将创建一个 TCP 连接并在某个 address/port 上侦听/建立与客户端的连接。比如说:172.00.000.0/1000,我已经使用 TCPListener

一个 c# windows 服务将使用相同的套接字/TCP 连接与客户端传输消息。

这个设计是为了确保第一个windows服务将一直保持socket/TCP连接,第二个windows服务可以在部署时停止/暂停,一旦应用程序启动,socket连接就开始传输消息是因为,连接存在是因为第一个 Windows 服务。

解决方法

你可以尝试使用这个 TcpTransferLib: https://www.nuget.org/packages/TcpTransferLib/2.0.0.6

它没有记录,但是使用这个库创建服务器和客户端很简单。好消息是,这个库关心块,所以你可以将“消息”发送到服务器或回客户端。我在一些项目中使用它,它运行稳定。

服务器代码:

TcpTransfer tcpServer = null;
tcpServer = new TcpTransfer();
tcpServer.bufferChunk = 4096;
tcpServer.connectionTimeout = 15000;
tcpServer.receiveTimeout = 15000;
tcpServer.sendTimeout = 15000;
tcpServer.pingOnReceiveTimeout = true;
tcpServer.OnReceive += TcpServer_OnReceive;
tcpServer.StartServer(5557);

private void TcpServer_OnReceive(object sender,PacketReceiveEventArgs e)
{
      string data = Encoding.UTF8.GetString(e.data,e.data.Length);
}

客户端代码:

TcpTransfer tcpClient = null;
tcpClient = new TcpTransfer();
tcpClient.bufferChunk = 4096;
tcpClient.connectionTimeout = 15000;
tcpClient.receiveTimeout = 15000;
tcpClient.sendTimeout = 15000;
tcpClient.pingOnReceiveTimeout = true;

bool connected = tcpClient.Connect(ip,port);
if(connected)
  tcpClient.Send("hello",tcpClient.masterClient);

这很容易,但没有太多选择:-)...