TClientSocket文件接收问题

ghy412 2014-06-19 07:12:12
客户端(DELPHI 7)利用ClientSocket接收从服务器端(JAVA)发过来的文件,如果文件太大会经常出现接收不完整的情况,如服务器发一个大小为75415字节的文件,客户端只接收到了75000字节!后测试,接收到75000直接就断开了(能在OnDisconnect事件中打出日志),但是在接收的完成之前没有设置连接关闭的动作,百事不得其解,望大侠指点!!

...全文
256 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghy412 2014-06-25
  • 打赏
  • 举报
回复
引用 12 楼 fang098 的回复:
如果我强制不让发送Disconnect消息,系统能够正常接收完成! 强制不让发送Disconnect消息,不是很明白,感觉是哪里业务逻辑没整好?
就是在scktcomp.pas中截获一下消息,发现是关闭连接的,直接Exit,不往下面执行。
小米很好吃 2014-06-24
  • 打赏
  • 举报
回复
看看java socket的流是不是关闭了,输出流关了socket就断了。
fang 2014-06-24
  • 打赏
  • 举报
回复
如果我强制不让发送Disconnect消息,系统能够正常接收完成! 强制不让发送Disconnect消息,不是很明白,感觉是哪里业务逻辑没整好?
ghy412 2014-06-23
  • 打赏
  • 举报
回复
引用 8 楼 fang098 的回复:
[quote=引用 7 楼 ghy412 的回复:] 服务端是没有问题的,问题还出在客户端,在没有接收完成时,自动断开连接了。
既然你觉得不是服务端问题,那你要跟到scktcomp.pas这个单元看看是什么问题哦。[/quote] 谢谢!我跟踪了一下,发现是有断开连接的消息,但是不知道是什么情况下发送的。
fang 2014-06-23
  • 打赏
  • 举报
回复
引用 7 楼 ghy412 的回复:
服务端是没有问题的,问题还出在客户端,在没有接收完成时,自动断开连接了。
既然你觉得不是服务端问题,那你要跟到scktcomp.pas这个单元看看是什么问题哦。
ghy412 2014-06-23
  • 打赏
  • 举报
回复
服务端是没有问题的,问题还出在客户端,在没有接收完成时,自动断开连接了。
fang 2014-06-23
  • 打赏
  • 举报
回复
引用 4 楼 ghy412 的回复:
客户端的缓冲区,我已经设置的足够大了,超时时间这部分也检查过了,没有问题。
更说明是服务端发送的问题了。查查服务端。
fang 2014-06-23
  • 打赏
  • 举报
回复
引用 楼主 ghy412 的回复:
客户端(DELPHI 7)利用ClientSocket接收从服务器端(JAVA)发过来的文件,如果文件太大会经常出现接收不完整的情况,如服务器发一个大小为75415字节的文件,客户端只接收到了75000字节!后测试,接收到75000直接就断开了(能在OnDisconnect事件中打出日志),但是在接收的完成之前没有设置连接关闭的动作,百事不得其解,望大侠指点!!
服务器端是不是确定发了这么多过来了?服务器端的每次发送有判断每次发送出去了多少数据??有可能是你实际发送的数据和你发送返回的数据长度不一致导致的。也就是说你默认发送数据都是认为发送成功的。而没去判断发送返回的长度。
ghy412 2014-06-23
  • 打赏
  • 举报
回复
引用 10 楼 fang098 的回复:
捕捉到了异常tclientsocket有断开连接的处理, ReceiveBuf抛异常了有Disconnect(FSocket)的处理哦。
我在ClientSocke的OnRead事件中的代码: try bufRecv :=Pointer(Integer(bufRecv)+iLength); iLength :=ClientSocket.Socket.ReceiveLength; FrFileSize :=FrFileSize +iLength; //接收长度 iLength GetMem(bufRecv,iLength); ClientSocket.Socket.ReceiveBuf(bufRecv^,iLength); try //业务逻辑处理 finally FreeMem(bufRecv,iLength); end; except on E: Exception do begin TLog.SaveTraceLog('Socket读取出错:'+E.Message); end; end; 没有捕获到异常。并且,如果我强制不让发送Disconnect消息,系统能够正常接收完成!
fang 2014-06-23
  • 打赏
  • 举报
回复
捕捉到了异常tclientsocket有断开连接的处理, ReceiveBuf抛异常了有Disconnect(FSocket)的处理哦。
ghy412 2014-06-20
  • 打赏
  • 举报
回复
客户端的缓冲区,我已经设置的足够大了,超时时间这部分也检查过了,没有问题。
super晓 2014-06-20
  • 打赏
  • 举报
回复
客户端接收文件缓冲区最大数据量可能不够。 接收 服务时间可能最大恰好是传输75000个字节的时间
ghy412 2014-06-20
  • 打赏
  • 举报
回复
很不幸,被我遇到了
xhz8000 2014-06-20
  • 打赏
  • 举报
回复
从来没有发现过这样的情况!

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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