我正在使用 Embarcadero RAD 工作室和TServerSocket
阻塞模式的组件编写 C++ 应用程序。我已经重写了OnGetThread
套接字的处理程序以创建一个自定义类,从该类派生TServerClientThread
重写默认ClientExecute()
方法。在这个函数中,我使用 aTWinSocketStream
并调用WaitForData()
、Read()
和Write()
来接收和发送数据。根据我读过的所有内容,这是一种可以接受的处理方式(尽管如果这是错误的,请纠正我)。
从这个答案阻塞套接字会触发哪些事件?我相信OnClientError
在阻塞模式下使用处理程序是可以的,因为事件会触发。在我的事件处理程序中,我每次都将错误代码设置为零,以便不会引发异常。
此外,每次我调用Read()
或Write()
从我的ClientExecute()
函数中调用时,我都会将它包装在一个 try-catch 块中并捕获ESocketError
异常。
我的问题是:这是最好的方法:
- 使用套接字错误事件处理程序来处理所有事情(这很好,因为我可以显示套接字错误代码以用于调试目的)
- 使用 try-catch 语句来防止我的应用程序抛出异常
- 两者都使用(尽管不要在处理程序中将错误代码设置为零,否则不会抛出异常,使 2. 上面毫无意义)
这是一个旧组件,已被弃用,但我必须使用它,但由于我无法找到正确使用它的铸铁指南,我从许多来源拼凑出一种方法。它已经运行了相当长的一段时间,但我时不时地收到一个静默错误,阻止服务器接受任何进一步的客户端连接 - 但我没有得到任何输出,OnClientError
也没有ESocketErrors
抛出。此应用程序在嵌入式设备上运行,因此检测到它的唯一方法是在它变得无响应时。
如果有人可以就上述 3 种方法中的哪一种最好(或提出替代方案)给我建议,我将不胜感激。