¥¥ 分步调试一切正常,直接运行就没动静了。比较郁闷,求助中......

ywcyj 2007-01-16 03:59:00
今天遇到了比较郁闷的情况:
分步调试一切正常,直接运行就没动静了。也不报错,就没有反应了。

经过跟踪测试,发现在两个地方卡壳了,一处为ftp连接送消息的时候,另一处为从ftp下载文件的时候。

高手们帮忙分析一下原因
...全文
278 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mabaolin 2007-01-17
  • 打赏
  • 举报
回复
可能的原因.net重起,另外运行时要确定为调试运行状态,重新编译

我也碰到过其他类似问题,搞了半天,后来突然调试运行就通过了.
ywcyj 2007-01-17
  • 打赏
  • 举报
回复
谢谢各位,我再试试
liqingle 2007-01-16
  • 打赏
  • 举报
回复
看了一下感觉没什么问题...
如果延迟不行的话,我也没有什么好办法了.
就先帮你再顶一下吧..
江城老温 2007-01-16
  • 打赏
  • 举报
回复
应该是有临界资源没有做好互斥工作。或者某地方操作超时。要仔细检查。
GXY2005 2007-01-16
  • 打赏
  • 举报
回复
象这种情况应该采用多线程处理!
liujia_0421 2007-01-16
  • 打赏
  • 举报
回复
你说单步的时候可以是吗?
ywcyj 2007-01-16
  • 打赏
  • 举报
回复
SendCommand("PASS " + strRemotePass);
这儿第一次卡壳,加休眠也不好使。蛮怪的
ywcyj 2007-01-16
  • 打赏
  • 举报
回复
网络连接不会有问题的,ftp及数据库服务器都在局域网内,有保证的
glacier111 2007-01-16
  • 打赏
  • 举报
回复
socketControl.Connect(ep);
在他后面休眠也不好使吗?
ywcyj 2007-01-16
  • 打赏
  • 举报
回复
/// <summary>
/// 下载一个文件
/// </summary>
/// <param name="strRemoteFileName">要下载的文件名</param>
/// <param name="strFolder">本地目录(不得以\结束)</param>
/// <param name="strLocalFileName">保存在本地时的文件名</param>
public void Get(string strRemoteFileName, string strFolder, string strLocalFileName)
{
if (!bConnected)
{
Connect();
}
SetTransferType(TransferType.Binary);
if (strLocalFileName.Equals(""))
{
strLocalFileName = strRemoteFileName;
}
if (!File.Exists(strLocalFileName))
{
Stream st = File.Create(strLocalFileName);
st.Close();
}
FileStream output = new
FileStream(strFolder + "\\" + strLocalFileName, FileMode.Create);
Socket socketData = CreateDataSocket();
SendCommand("RETR " + strRemoteFileName);
if (!(iReplyCode == 150 || iReplyCode == 125
|| iReplyCode == 226 || iReplyCode == 250))
{
throw new IOException(strReply.Substring(4));
}
while (true)
{
int iBytes = socketData.Receive(buffer, buffer.Length, 0);
output.Write(buffer, 0, iBytes);
if (iBytes <= 0)
{
break;
}
}
output.Close();
if (socketData.Connected)
{
socketData.Close();
}
if (!(iReplyCode == 226 || iReplyCode == 250))
{
ReadReply();
if (!(iReplyCode == 226 || iReplyCode == 250))
{
throw new IOException(strReply.Substring(4));
}
}
}
ywcyj 2007-01-16
  • 打赏
  • 举报
回复
/// <summary>
/// 建立连接
/// </summary>
public string Connect()
{
socketControl = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(RemoteHost), strRemotePort);
// 链接
try
{
socketControl.Connect(ep);
}
catch (Exception)
{
return "不能与FTP服务器建立连接";
}

// 获取应答码
ReadReply();
if (iReplyCode != 220)
{
DisConnect();
return strReply.Substring(4);
}

// 登陆
SendCommand("USER " + strRemoteUser);
if (!(iReplyCode == 331 || iReplyCode == 230))
{
CloseSocketConnect();//关闭连接
return strReply.Substring(4);
}
if (iReplyCode != 230)
{
SendCommand("PASS " + strRemotePass);
if (!(iReplyCode == 230 || iReplyCode == 202))
{
CloseSocketConnect();//关闭连接
return strReply.Substring(4);
}
}
bConnected = true;

// 切换到目录
ChDir(strRemotePath);
return "您已于FTP服务器建立连接";
}
lizhizhe2000 2007-01-16
  • 打赏
  • 举报
回复
网络连接的问题?
liujia_0421 2007-01-16
  • 打赏
  • 举报
回复
能否贴些相关代码..
ywcyj 2007-01-16
  • 打赏
  • 举报
回复
楼上说的问题我想过,但测试以后发现没解决问题,现在还在继续尝试。
Koala_sea 2007-01-16
  • 打赏
  • 举报
回复
同意楼上的看法。曾经我也是遇到过这样的情况。后来,我把它做成线程,然后延时执行,就好了。
glacier111 2007-01-16
  • 打赏
  • 举报
回复
直接运行应该是时间不够就结束了,分步时你是手动的,连接时间也许刚好够用,让程序在连接时休眠一段时间,多长时间自己可以掌握一下

110,499

社区成员

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

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

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