我现在正在使用asyn套接字.我有一个回调函数'onDataReceived',只要我收到任何数据就会触发它.
首先我一次得到一个char,所以我将socketPacket数据缓冲区更改为一个大数组.现在,当我不断接收数据,我得到这一切在一次,但是当我试图发送一个更大的文件,一旦它超过了数组的大小这是行不通的.
我的问题是这个.我有一个多线程套接字服务器.如何在收到所有数据时确定?例如,我需要发送一个图像,我将图像编码为base64并构造一个命令"BASE64IMAGE",然后服务器读取字符串,直到它达到END_OF_DATA?有更好的方法吗?谢谢!
我的问题是这个.我有一个多线程套接字服务器.如何在收到所有数据时确定?
发送"消息"有三种标准选项(无论是图像还是其他内容 - 可能很大的整个数据块):
就个人而言,我喜欢最后一个选项 - 它使得阅读数据并确保你比前两个选项简单得多.您可以在开始之前分配适当数量的内存来接收数据等.但是,如果在开始之前不知道消息大小,则无法很好地应对.您可以通过为单个消息提供多个"块"来修改方案,其中您发送块大小然后发送数据,块大小0表示数据的结束.
需要注意的是,如果你在只是一个套接字传输数据,而你并不需要它是7位ASCII干净,我就不会转换为基64首.只需将其作为二进制数据传输 - 您的代码将在时间和带宽上更简单,更高效.
| 归档时间: |
|
| 查看次数: |
881 次 |
| 最近记录: |