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

C#套接字编程。允许2个应用程序使用相同的套接字/TCP连接,c#,sockets,serversocket,iso8583,C#,Sockets,Serversocket,Iso8583,我正在创建c#socket应用程序和服务器端。 我需要创建一个C#windows服务,该服务将创建TCP连接,并在某个地址/端口上侦听/建立与客户端的连接。比如说:172.00.000.0/1000,我已经用TCPListener 另一个c#windows服务将使用相同的套接字/TCP连接与客户端传输消息 此设计旨在确保第一个windows服务将始终保持套接字/TCP连接,第二个windows服务可以在部署时停止/暂停,并且一旦启动应用程序,套接字连接就会开始传输消息,因为,由于第一个windo

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

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


此设计旨在确保第一个windows服务将始终保持套接字/TCP连接,第二个windows服务可以在部署时停止/暂停,并且一旦启动应用程序,套接字连接就会开始传输消息,因为,由于第一个windows服务,连接已存在。

您可以尝试使用此TCPTTransferlib:

虽然没有文档记录,但使用此库创建服务器和客户机很简单。好的是,这个lib关心块,所以您可以将“消息”发送到服务器或返回到客户机。我在一些项目中使用它,它工作稳定

服务器代码:

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, 0, 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);

这很简单,但没有太多选择:-)…

有许多比套接字更好的解决方案。我建议使用信号器、GRPC、wcf、任何服务总线,以及基本上除sockets*技术之外的任何其他现代技术*…坦率地说,您的设计是有问题的。但更大的问题是你没有问任何问题。可以使用本机Win32 API复制套接字句柄并将其传递给子进程。但是不能同时有两个进程成功地使用套接字。见例。也许你能在你的情况下让它发挥作用。也许不是。您的问题没有足够的重点,任何人都无法提供一个好的答案。为什么不在重新启动时建立一个新的连接呢?-不管怎么说,应用程序在关闭的时候并不能发送任何东西,所以为什么要在这种情况下努力节省一点时间呢?我会试试这个。谢谢