![](/img/trans.png)
[英]How can I make my lua tcp server receive messages from a c# tcp client?
[英]How can I gracefully start my C# TCP client before I start my TCP server
我正在编写一个相当简单的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不会等待,你必须重试。
根据用户的行为,当代码首先需要连接时,让客户端按需连接。 如果连接失败,告诉用户他不能这样做,不管它是什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.