循环调用FTP通信时遇到的问题
来源:互联网 发布:hash 源码 编辑:程序博客网 时间:2024/06/02 04:35
const int DELAYED = 300; //FTP请求延时(300ms-500ms) const int TIMEOUT = 1000; //FTP请求超时时(1000ms-3000ms) static byte[] buf = new byte[BUFFER_SIZE]; //FTP 数据流缓存 object obj = new object(); FtpWebResponse ftpWebResponse = null; public override void Connection(object host) { conn: if (!this.Equip.Enable) return; try { var uriBuilder = new UriBuilder(Uri.UriSchemeFtp, (string)host); var uri = new Uri(uriBuilder.Uri, targetFileName); while (true) { var ftpWebRequest = (FtpWebRequest)FtpWebRequest.Create(uri); ftpWebRequest.Credentials = new NetworkCredential(USER_NAME, PASSWORD); ftpWebRequest.Method = WebRequestMethods.Ftp.DownloadFile; ftpWebRequest.KeepAlive = false; ftpWebRequest.UseBinary = true; ftpWebRequest.UsePassive = false; ftpWebRequest.Timeout = TIMEOUT; ftpWebResponse = (FtpWebResponse)ftpWebRequest.GetResponse(); Thread.Sleep(DELAYED); //之前没有code1 buf = new byte[BUFFER_SIZE]; //之前没有code2 var responseStream = ftpWebResponse.GetResponseStream(); responseStream.Read(buf, 0, BUFFER_SIZE); responseStream.Close(); this.ConnState = EConnectionState.Open; Thread.Sleep(500); } //goto conn; } catch (Exception ex) { Console.WriteLine("FTP Connection Exception:" + ex.Message); if (ex.Message.Equals("无法连接到远程服务器")) { this.ConnState = EConnectionState.Close; } else { if (this.ConnState != EConnectionState.Close) { Thread.Sleep(3000); goto conn; } } }
调试过程中,多次FTP通信不能保证数据的实时性。
代码运行才PC端,FTP获取的是设备异常数据,
第一次请求异常数据(正常),手动操作设备进行异常解除(同时删除设备异常数据);
第二次请求异常数据(异常),异常数据依然存在;
抓耳挠腮
过程1:【buf】变量为多线程共用数据,试图上锁后进行测试,结果失败。
过程2:怀疑 FTP通信机制问题,通信速度过快,进行请求降速和FTP异步通信,依然没有解决问题。
过程3:【buf】数据清空,清空后数据不能,可以消除异常数据,但是因为通信速度过快,导致异常数据不能再次取得。
接下来就是没有目标的胡乱测试,导致程序代码更多bug。三天后上午重写代码结构,排除多线程影响,糊里糊涂的程序正常运行了。
回过头来看程序故障原因:
1、FTP响应需要时间,进行Thread.Sleep,不然会导致,响应的是上次的响应。
2、byte[] buf=new byte[]{}; 数组在进行 responseStream.Read(buf, 0, BUFFER_SIZE) 赋值不能更改数据内容,基础知识没学好啊。
草写的,回头再修。
阅读全文
0 0
- 循环调用FTP通信时遇到的问题
- FTP下载时遇到的问题
- 在access的vba中循环调用带参数查询时遇到的问题及解决办法
- ftp安装遇到的问题
- 搭建FTP遇到的问题
- ftp服务器遇到的问题
- ftp传输遇到的问题
- java操作FTP时遇到的问题小结
- C#调用DLL时遇到的问题
- vs2010调用Tesseract_ocr时遇到的问题
- shell中循环Ftp的效率问题
- 利用IIS建立FTP遇到的问题
- centos6.4打开ftp遇到的问题
- 创建FTP遇到的问题,不定期更新
- ftp通信时的指令
- Ajax 的循环调用问题
- 今天在学习C语言循环时遇到的问题
- JNI调用遇到的问题
- Oracle 11g中管理员用户sys,system密码不可用解决办法
- mysql 浅谈
- 畅通工程(并查集)
- 迭代器
- Android ViewFlipper类
- 循环调用FTP通信时遇到的问题
- 爬虫学习02 发送POST请求 使用代理 处理cookies session
- [MariaDB]Linux 快速安装MariaDB
- 易观 OLAP 大赛揭晓 PingCAP 斩获商业组桂冠
- C++ Primer Plus 课后编程练习——第五章循环和关系表达式
- Oracle 还原数据 (dmp 文件)
- python之for循环详解
- Android中的主题Theme相关
- String拼接字符串