如何在启动TCP服务器之前优雅地启动我的C#TCP客户端
本文关键字:启动 我的 C#TCP 客户端 TCP 服务器 | 更新日期: 2023-09-27 17:58:13
我正在编写一个相当简单的TCP/IP客户端应用程序。当我启动服务器(另一个单独的应用程序),然后按顺序启动客户端时,我能够成功连接。我想让客户变得强大,这样我就可以先启动它,它不会坏。此外,我不希望有一个特殊的用户操作来告诉客户端尝试连接。我还想在客户端上使用非阻塞异步IO。
为了尝试并实现这一点,我尝试使用Socket.BeginConnect方法。我的意图是,这个调用将生成一个后台线程,在建立连接之前,该线程将在EndConnect调用中被阻止。这样,我的客户端可以在启动时调用此方法,然后继续操作。这是我的代码:
public bool Init_Port(string Host)
{
IPHostEntry ipHostInfo = Dns.Resolve(Host);
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, PORT);
try
{
//Create the connection
My_Socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
My_Socket.BeginConnect(localEndPoint, new AsyncCallback(Connect_To_Port), My_Socket);
}
catch (Exception e)
{
ErrorHandler(e.Message);
return false;
}
return true;
}
private void Connect_To_Port(IAsyncResult ar)
{
try
{
if (My_Socket != null)
{
//will block the thread until a connection is made
My_Socket.EndConnect(ar);
Connection_Flag = true;
//Setup the asynchronous read
My_Socket.BeginReceive(Rx_Buffer, 0, SOCKET_BUFFER_SIZE, 0,
new AsyncCallback(Read_Port), My_Socket );
}
}
catch (Exception e)
{
ErrorHandler(e.Message);
}
}
我在不启动服务器应用程序的情况下对此进行测试。我希望在我的服务器应用程序启动之前,该线程将在EndConnect上被阻止。我观察到EndConnect立即返回,并且我得到错误消息
无法建立连接,因为目标计算机主动拒绝它127.0.0.1:50042
有人能告诉我我能做些什么让这个异步连接等待服务器应用程序吗?提前谢谢。
有人能告诉我我能做些什么让这个异步连接等待服务器吗应用
什么都没有。你每X秒循环运行一次,直到它启动或者你得到一个逻辑超时。TCP不会等待,您必须重试。
当代码第一次需要连接时,根据用户的操作,让客户端按需连接即可。如果连接失败,告诉用户他还不能这样做,不管是什么。