使用ICS v8在同一插槽上接收字符串和图像

时间:2013-05-15 07:13:01

标签: delphi tcp asyncsocket

我正在开发一个小型客户端/服务器项目,我决定尝试将其切换为使用ICS。不幸的是,我没有使用过ICS的经验,而且一般都没有使用套接字的经验。我的服务器需要能够从客户端接收字符串,并处理它们。我的服务器还需要能够从客户端接收图像。

因为我是菜鸟,我以前使用两个套接字来实现这一点:字符串的TServerSocket和图像的Indy tcp服务器组件。现在我正在切换到ICS,我宁愿将这两个函数合并到一个套接字中,因为我不认为服务器需要为它需要处理的每种不同类型的传输需要不同的套接字是正常的。

我遇到两个主要障碍:

  • 我不知道解决从同一个事件处理程序接收多种类型数据的问题的最佳方法。我想我可以将OnDataAvailable处理程序默认为读取字符串,然后我可以让客户端向服务器发送一个字符串,表明它将接下来发送图像(在这种情况下,服务器将切换到读取图像)。但是,有没有更有效的方法呢?我希望服务器能够同时处理多个客户端,我希望它尽可能快速和稳定,所以有一种处理这种情况的“首选”方法吗?
  • 我实际上不知道如何使用ICS发送/接收图像。使用Indy,我让客户端将图像保存到TMemoryStream中,然后使用'SendStream'和'ReceiveStream'函数,但ICS没有处理流的功能(据我所知)。我想我需要使用“发送”和“接收”,但我不确定最好的方法。我可以只使用对TJpegImage对象的引用作为缓冲区,还是需要将它保存到流中,然后在发送之前将流读入字节数组?另外,我知道发送/接收文件在非阻塞套接字上有点棘手,那么最好的方法是什么呢?

如果有人可以提供一些建议,甚至是示例代码,那么我将非常感谢您的帮助。

我为我的问题的长度道歉,如果看起来我只是要求某人给我一个解决方案,我道歉。我还没有找到能够回答我所有问题的ICS演示,Google似乎并不是我的朋友。我不愿意在没有从比我更了解这一点的人那里获得一些反馈的情况下开始攻击它,因为我真的想尽可能地实现解决方案的效率。提前致谢。

0 个答案:

没有答案