=========100分求解一个关于NetWorkStream的奇怪问题==========

yanga 2006-10-23 11:42:31
我在写一个邮件的收发程序,主要步骤如下:

===========================================
1.连接到邮件服务器并提供账号密码登录.

2.获取邮箱的邮件数量及大小.

3.循环读取邮件内容并添加到一个DataTable对象.

4.断开与邮件服务器的连接.
===========================================


与服务器的数据通信用Socket

发送与接收数据用NetWorkStream

主要的功能我都写在一个名为"Email"的类里面

显示数据的页面名为"WebForm1.aspx"




我的问题是:直接运行该程序的话,总是有规律的少一部份邮件数据,例如:

总邮件数为:10
邮件的ID 邮件的内容
1 无
2 无
3 有
4 有
5 无
6 无
7 无
8 有
9 无
10 无

当我把断点设在收邮件的"Email"类中函数"ReadPOP"上逐步调试时又能正常取到所有邮件数据了.

我的感觉就是在向服务器发送命令后,必需要稍微等一下再收就可以正常得到数据否则就不行.

有个朋友和我说要把缓冲区清理一下才行.

向服务器发送命令与接收邮件数据的函数如下:
向服务器发送命令

Private Sub WritePOP(ByVal s As String)
s &= ControlChars.CrLf
NetStream.Write(Encoding.ASCII.GetBytes(s.ToCharArray), 0, s.Length)
End Sub

接收邮件数据

Private Function ReadPOP() As String
Dim myReadBuffer(1024) As Byte
Dim numberOfBytesRead As Integer = 0
Dim s As String = ""
Do
numberOfBytesRead = NetStream.Read(myReadBuffer, 0, myReadBuffer.Length)
s &= Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead)
Loop While NetStream.DataAvailable
Return s
End Function
...全文
301 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanga 2006-10-23
  • 打赏
  • 举报
回复
虽然目前这样做是可以了,但我想搞清楚的是为什么会出现这种情况.

MSDN里对DataAvailable属性的描述是:获取一个值,该值指示在要读取的 NetworkStream 上是

否有可用的数据。

但为什么在我的这个程序里它为什么出现错误的叛断呢?
geodetic 2006-10-23
  • 打赏
  • 举报
回复
原来如此。
学习
呵呵
yanga 2006-10-23
  • 打赏
  • 举报
回复
再来看一下ReadPOP函数:

Private Function ReadPOP() As String
Dim myReadBuffer(1024) As Byte
Dim numberOfBytesRead As Integer = 0
Dim s As String = ""
Do
numberOfBytesRead = NetStream.Read(myReadBuffer, 0, myReadBuffer.Length)
s &= Encoding.ASCII.GetString(myReadBuffer, 0, numberOfBytesRead)
Loop While NetStream.DataAvailable
Return s
End Function

函数里用了一个Do......Loop循环,是否循环的靠 NetStream对象的DataAvailable方法来叛断,我产生了一个凝问,在这种情况下只靠NetStream.DataAvailable方法来叛断准确吗?

大家知道在向POP服务器发出"RETR"命令取邮件时,POP服务器返回的邮件是以"."+回车+换行符为结尾的,于是我就在 NetStream.DataAvailable方法后又加上了这个条件如下:

Do
............
............
Loop NetStream.DataAvailable Or s.EndsWith("." & ControlChars.CrLf) = False

也就是说当NetStream里还有数据或者邮件内容的最后不是"."+ControlChars.CrLf时继续循环直到NetStream里没有数据并且邮件内容的最后是"." + ControlChars.CrLf时才结束循环.

最后测试,成功了!
yanga 2006-10-23
  • 打赏
  • 举报
回复
补充并明确一下接收的问题:

1.连接到POP服务器并登录时发送与接收数据同登录完毕发送接收数据用的都是Email类里的
WritePOP过程与ReadPOP函数,登录过程中接收的数据是完整的,而收取邮件内容时数据就不完
整了.

2.我的程序循环取邮件内容时第一,第二封邮件内容没有取到数据,当运行到要取第三封邮件的数据时,第一封邮件的内容才删删来迟.可我的程序把本来第一封邮件的内容付给第三封邮件了,结果就造成了显示第一,第二封邮件时没有数据,第三封有数据但那是第一封的数据.
myminimouse 2006-10-23
  • 打赏
  • 举报
回复
帮顶
geodetic 2006-10-23
  • 打赏
  • 举报
回复
不是高手。
很有趣的问题,帮顶。

MSDN NetworkStream.Flush有如下说明:
Flush 方法实现 Stream.Flush 方法,但是因为 NetworkStream 不进行缓冲处理,所以此方法对网络流无效。

所以我想应该不是缓冲的问题,而且微软的东西不可能有这么严重的bug就release吧。

建议在收发的客户端和服务器端都弄一个网络监控工具,看看缺失数据是否发生传送行为。

还有就是用OE等客户端试试是否有问题,另外看看POP服务器的设置。
yanga 2006-10-23
  • 打赏
  • 举报
回复
来人啊~~!高手呢????
yanga 2006-10-23
  • 打赏
  • 举报
回复
是不是我没把问题说清楚?怎么没人啊~~~
内容概要:本文围绕基于电感电容电流环PI与前馈补偿矩阵构造的跟网型储能变流器,开展dq坐标系下的阻抗理论建模与Simulink仿真对比研究。通过建立储能变流器在dq域的数学模型,设计包含电感电流内环、电容电流中间环和电压外环的多环控制结构,并引入前馈补偿矩阵以提升系统的动态响应能力和稳定性。在此基础上,采用小信号分析法推导系统的输出阻抗模型,构建完整的dq域阻抗理论框架,并利用Simulink平台搭建高保真仿真模型进行频域扫频验证,实现理论建模与仿真结果的精确对比,深入分析控制参数对系统阻抗特性的影响规律,揭示其在抑制并网系统振荡、提升稳定性方面的关键作用,为新能源并网系统的稳定性分析与优化设计提供坚实的理论支撑和技术路径。; 适合人群:具备电力电子、自动控制理论基础,从事新能源发电、储能系统、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握跟网型储能变流器在dq域的阻抗建模方法;②理解多环控制与前馈补偿对系统阻抗特性的影响机制;③实现理论阻抗模型与Simulink仿真扫频结果的对比验证,支撑并网稳定性分析。; 阅读建议:学习者应结合控制理论与电力电子变换器知识,重点关注数学推导与仿真建模的一致性,建议动手复现Simulink仿真模型并进行参数敏感性分析,以深化对阻抗重塑机理的理解。
内容概要:本文介绍了基于Matlab实现的基本雷达与干扰机仿真系统,旨在通过代码实践帮助读者深入理解雷达系统的工作原理及其在复杂电磁环境中与干扰机的相互作用机制。内容涵盖雷达信号的发射、传播、目标回波接收、微多普勒效应建模、干扰信号的生成与影响分析等关键环节,结合具体的Matlab代码实现了完整的仿真流程,并提供了详尽的结果可视化与性能评估,重点展示了目标探测、时频特征提取、干扰抑制策略等关键技术的实现方法,有助于掌握雷达系统动态特性与抗干扰能力的分析手段。; 适合人群:具备一定Matlab编程基础,对雷达系统、信号处理、电子对抗或通信工程等领域感兴趣的高校学生、科研人员及工程技术人员。; 使用场景及目标:①学习雷达系统的基本构成与工作流程;②掌握雷达回波信号与典型干扰信号(如噪声干扰、欺骗干扰)的数学建模方法;③通过Matlab仿真深入理解微多普勒特征、时频分析技术(如STFT、小波变换)及干扰抑制算法;④为开展雷达目标识别、抗干扰算法设计或电子战系统仿真等前沿研究奠定实践基础。; 阅读建议:建议读者结合提供的Matlab代码逐段运行并调试,重点关注雷达信号模型、目标运动建模、干扰生成模块及信号处理流程,配合文中仿真结果进行对比分析;同时可延伸学习现代信号处理技术如压缩感知、机器学习在雷达中的应用,以提升综合科研与工程实践能力。
基于星形耦合自均流机制的双三相LLC变换器变频调压与多模式切换控制策略研究(Simulink仿真实现)内容概要:本文研究了一种基于星形耦合自均流机制的双三相LLC变换器,重点探讨其变频调压与多模式切换控制策略,并通过Simulink进行仿真实现。该研究旨在解决双三相LLC变换器在不同工作模式下电流不均衡、电压调节不稳定等问题,通过引入星形耦合结构实现自动均流,提升系统效率与可靠性。文中详细分析了变频控制对谐振变换器输出电压的调节机理,设计了多模式平滑切换策略以适应负载变化,确保系统在轻载、重载及瞬态工况下的高效稳定运行。同时,建立了完整的Simulink仿真模型,验证了所提控制策略在动态响应、稳态精度和抗干扰能力方面的优越性。; 适合人群:从事电力电子与电力传动、新能源变换技术及相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于高效率、高可靠性的直流电源系统设计,如电动汽车充电、数据中心供电等;②为多相LLC谐振变换器的均流控制与模式切换提供理论支持和技术方案;③适用于需要高性能电源变换器的工业应用场景,推动先进控制策略在实际系统中的落地应用。; 阅读建议:读者应具备一定的电力电子电路与控制系统基础知识,建议结合Simulink仿真模型同步学习,深入理解控制逻辑的设计细节与参数整定方法,并可通过修改仿真参数验证不同工况下的系统性能,以增强实践理解和创新能力。
内容概要:WiFiSupply斯普莱WFS7000-52AX5是一款高性能、高负载型工业级双射频无线AP基站,支持2.4G和5.8G双频段WiFi6(802.11ax)标准,采用OFDMA、MIMO 4T4R架构及射频合路技术,实现最大1974Mbps的双频合并带宽。设备具备29dBm高发射功率、-96dBm高接收灵敏度,支持Fast Roaming快速漫游(切换延迟≤30ms)、多链路聚合、主备链路备份、巨量安全隧道等核心技术,保障低延迟、零丢包的稳定通信。配备5个千兆网口(含1个2.5G口)、支持POE/DC/端子多种供电方式,具备IP54防护、-45~85℃宽温运行、防浪涌防静电等工业级设计,适用于复杂恶劣环境。支持胖瘦一体模式、云端/本地/图形化多方式管理,并提供API接口便于第三方平台集成。; 适合人群:工业自动化、智能制造、智慧物流等领域中从事无线网络部署与运维的工程师和技术人员,具备基本网络知识和工业通信需求的专业用户。; 使用场景及目标:①用于AMR/AGV/RGV小车、无人叉车、穿梭车、天车、堆垛机等移动设备的无线联网;②满足无人机遥控、车载、船载、火车视频传输、分拣机PLC控制等高移动性、高可靠性场景的无线桥接与覆盖需求;③实现工业4.0环境下大规模终端接入、无缝漫游、安全传输的无线网络建设。; 阅读建议:本文档技术参数详尽,建议结合实际部署场景重点关注设备的射频性能、漫游切换、供电安装方式及管理功能,以便充分发挥其在高负载、强干扰工业环境下的优势。

62,271

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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