还是PDA发送图片给服务器

sophia__rp 2009-08-15 11:46:56
前几天发了个贴,没得到解决,经多次修改,有一点点眉目,还是有问题,继续问。
现在的情况是,PDA发送图片后,如果服务器接收图片的循环逐句调试,就能正确显示图片;不逐句调试则接收到的图片大小比原图片大,不能正确显示。比如发送32k的图片,直接接收的话可能是36k,40k,44k……
部分代码:
PDA端:

NetworkStream ns = Client.GetStream();
FileStream fs = new FileStream(FileName, FileMode.Open);
byte[] imagedata = new byte[4096];
while ( fs.Read(imagedata, 0, 4096) != 0)
{
ns.Write(imagedata, 0, imagedata.Length);
ns.Flush();
imagedata = new byte[4096];
}
fs.Close();
ns.Close();
Client.Close();

服务器端:

TcpClient client = listener.AcceptTcpClient();
NetworkStream ns = client.GetStream();
FileStream filestream = new FileStream(Application.StartupPath + "\\test.jpg", FileMode.OpenOrCreate, FileAccess.Write);
byte[] reccimg = new byte[2048];
int byteread = ns.Read(reccimg, 0, reccimg.Length);
while (byteread != 0)
{
filestream.Write(reccimg, 0, reccimg.Length);
ns.Flush();
byteread = ns.Read(reccimg, 0, reccimg.Length);
}
filestream.Close();
ns.Close();
client.Close();

怎么样能保证接收到的是正确的呢?多谢多谢~~
...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sophia__rp 2009-08-20
  • 打赏
  • 举报
回复
还有,就是逐句循环的话得到的就是对的,让它自己去执行就有错误……
sophia__rp 2009-08-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yangyanli 的回复:]
ns.Write(imagedata, 0, imagedata.Length);

你这句有问题.imagedata.Length是固定的4096,所以你应该改成Read的长度
[/Quote]
所以用了循环,后来又做了改进,PDA端首先获得图片长度发送给服务器,服务器端循环读到此长度时止,还是不行。
再后来考虑到PDA内存可能有限制,将每次发送的长度缩短到几十B,还是有问题。。。
yangyanli 2009-08-20
  • 打赏
  • 举报
回复
ns.Write(imagedata, 0, imagedata.Length);

你这句有问题.imagedata.Length是固定的4096,所以你应该改成Read的长度
sophia__rp 2009-08-20
  • 打赏
  • 举报
回复
都试了,还是不行
不读取多余的内容了,但是接收到的图片一般情况下只有上部分是好的,下部分是错误的,像是被划过的碟片放出来的图像一样……

ps:
没有答案是不是也得结贴呢?
sophia__rp 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sp1234 的回复:]
你可以先用前4个字节来表示文件大小,后面才是文件内容。
[/Quote]
好的好的,多谢~试试
[Quote=引用 1 楼 sp1234 的回复:]
接收时,不要读取多余的内容。
[/Quote]
这个怎么保证呢?我上面的循环不能做到么?还请再提点一下~~
  • 打赏
  • 举报
回复
你可以先用前4个字节来表示文件大小,后面才是文件内容。

接收时,不要读取多余的内容。
源码下载地址: https://pan.quark.cn/s/860a2ecd6390 uapp.dev uapp 能做什么 uapp源自跨平台开发的最佳实践, 通过集成 uni-app, electron, tauri,让开发者仅需维护一套代码,就能横扫所有平台。 uapp支持所有的手机端(android, ios),支持所有的电脑端(windows, mac osx, linux),支持所有的小程序,浏览器插件等等。 uapp让Web开发者能搞更多事情,会H5就可以无限制重构一切软件。 [x] 开发微信小程序时,仅运行 ,就能生成小程序代码,并直接打开微信开发者工具加载。 [x] 开发APP离线基座,仅运行 ,就能生成自定义基座安装包,且自动发布到 hbx 工程下面直接使用。 [x] 可以查看包名, 签名 md5, dcloudkey, jwt 等开发中用到的各种信息。 多一个平台,就多了一个流量渠道,多一个平台,就多个用户选择的理由,而做这些事,仅需维护一套代码。 哪怕只开发一个平台,同样花时间写代码,为什么不选择复用价值更高的方法呢。 一、先安装 uappsdk 1、 安装 uapp 命令 2、下载 uniapp 离线打包的 SDK 注意和.uappsdk区分开,此处的uniapp离线包的SDK是指dcloud 官方发布的 android 离线打包SDK: ios 离线打包SDK: 解压其中的SDK目录,放入 .uappsdk 文件夹里,最终 .uappsdk 文件夹结构如下: SDK 相关文件都放在当前用户的 $HOME/.uappsdk 目录下。 需要引入哪些模块,请务必仔细阅读官方的 SDK 模块依赖说明,模块多了会影响APP审核,少了会影响功能使用。 ...
内容概要:本文系统介绍了基于Koopman理论识别机器人动力学中非线性系统的方法,并提供了完整的Matlab代码实现。该方法通过将复杂的非线性动力学系统映射到高维线性空间,利用数据驱动方式构建可解析的系统模型,有效解决了传统建模在强非线性场景下的局限性。文档不仅涵盖理论推导,还强调科研应兼具严谨逻辑与创新思维,倡导“借力”与“创新”相结合的研究范式。资源包内含多个相关科研方向的代码实例与案例分析,适用于系统建模、机器人控制、非线性系统辨识等领域的研究人员进行学习、复现与拓展。; 适合人群:具备控制系统、机器人动力学或非线性系统建模基础知识,正在从事相关领域科研工作的硕士、博士研究生及科研人员。; 使用场景及目标:①深入理解Koopman算子理论及其在非线性系统建模中的核心应用;②通过Matlab代码复现机器人动力学识别流程,提升系统辨识与仿真能力;③为开展数据驱动控制、智能建模、机器人学习等前沿研究提供方法支撑和技术积累。; 阅读建议:建议按照文档结构循序渐进阅读,重点结合理论讲解与代码实现部分进行对照学习,充分利用网盘提供的完整资源开展实践操作,以深化对Koopman方法在实际工程问题中应用的理解与掌握。

111,131

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧