我正在处理一个小型客户端/服务器项目,我决定尝试将其切换为使用 ICS。不幸的是,我没有使用 ICS 的经验,一般来说也很少使用套接字。我的服务器需要能够从客户端接收字符串,并处理它们。我的服务器还需要能够接收来自客户端的图像。
因为我是一个菜鸟,我以前使用两个套接字来完成此操作:一个 TServerSocket 用于字符串,一个 Indy tcp 服务器组件用于图像。现在我正在切换到 ICS,我更愿意将这两个功能合并到一个套接字中,因为我认为服务器需要为它需要处理的每种不同类型的传输使用不同的套接字是不正常的。
我遇到了两个主要障碍:
- 我不知道解决从同一事件处理程序接收多种类型数据的问题的最佳方法。我想我可以让 OnDataAvailable 处理程序默认读取字符串,然后我可以让客户端向服务器发送一个字符串,指示它接下来将发送图像(在这种情况下,服务器将切换到读取图像)。不过,有没有更有效的方法呢?我希望服务器能够一次处理多个客户端,并且我希望它尽可能快速和稳定,那么有没有一种“首选”的方法来处理这种情况?
- 我实际上不知道如何使用 ICS 发送/接收图像。使用 Indy,我让客户端将图像保存到 TMemoryStream 中,然后使用“SendStream”和“ReceiveStream”函数,但 ICS 没有处理流的函数(据我所知)。我想我需要使用“发送”和“接收”,但我不确定最好的方法。我可以只使用对 TJpegImage 对象的引用作为缓冲区,还是需要将其保存到流中,然后在发送之前将流读入字节数组?另外,我知道在非阻塞套接字上发送/接收文件有点棘手,那么解决这个问题的最佳方法是什么?
如果有人可以提供一些建议,甚至是示例代码,那么我将非常感谢您的帮助。
对于我的问题的长度,我深表歉意,如果我似乎只是在要求有人给我一个解决方案,我深表歉意。我还没有找到一个可以回答我所有问题的 ICS 演示,而且 Google 似乎在这方面不是我的朋友。我不愿意在没有从比我了解更多的人那里得到一些反馈的情况下开始破解它,因为我真的想尽可能高效地实施解决方案。提前致谢。