自己写了FTP服务器,为什么隔一段时间服务会停止?

诸法空性 2017-11-01 02:45:49
使用了TcpListener建立了FTP服务器,但是每隔一段时间TcpListener会停止这是为什么呢?怎么处理?
...全文
533 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
正怒月神 版主 2017-11-13
  • 打赏
  • 举报
回复
我上次做的是sftp。出现隔一段时间服务停止。 后来查看代码,发现是如果有异常,最后finally时,没有关闭。 这导致sftp对象会产生多个。当太多时,服务器本地会把sftp服务停掉。 你的代码,没有finally块,试试在finally中关闭ftp
ying1234 2017-11-13
  • 打赏
  • 举报
回复
查看一下事件查看器里的应用程序日志,看看有没有和你程序相关的错误,这种情况有可能是批量错误导致的
swl82560397pq 2017-11-02
  • 打赏
  • 举报
回复
路过顶一下!
诸法空性 2017-11-02
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
是每隔一段时间TcpListener会停止这是为什么呢?怎么处理? -》都喜欢拿着不着边际的叙述来描述问题。自己的程序在什么情况下出问题的都描述不清楚,让别人怎么回答。
我要知道的话也不问了。
诸法空性 2017-11-02
  • 打赏
  • 举报
回复
引用 4 楼 peng2739956 的回复:
不要用while(true) 这种TCP 监听 容易产生半连接的问题。从而产生死循环
那要怎么写呢?
peng2739956 2017-11-01
  • 打赏
  • 举报
回复
不要用while(true) 这种TCP 监听 容易产生半连接的问题。从而产生死循环
exception92 2017-11-01
  • 打赏
  • 举报
回复
是每隔一段时间TcpListener会停止这是为什么呢?怎么处理? -》都喜欢拿着不着边际的叙述来描述问题。自己的程序在什么情况下出问题的都描述不清楚,让别人怎么回答。
诸法空性 2017-11-01
  • 打赏
  • 举报
回复
用线程启动: /// <summary> /// 启动FTPServer /// </summary> internal void Start() { //用户处理 Users = WindowsUserBC.GetFtpUsers(); if (Users==null) { //没有此用户时。 Users = new JObject(); //Users.Add(this.SiteUserName, this.SitePassword); } ListenThread = new Thread(ListenClientConnect); ListenThread.IsBackground = true; ListenThread.Start(); } // 监听端口,处理客户端连接 private void ListenClientConnect() { try { IPHostEntry iph = Dns.GetHostEntry(""); //寻找含.的ipv4 IPAddress localip = null; for (int i = 0; i < iph.AddressList.Length; i++) { IPAddress aip = iph.AddressList[i]; if (aip.ToString().Contains(".")) { localip = aip; } } TcpListener = new TcpListener(localip, this.Port); // 开始监听传入的请求 TcpListener.Start(); FTPServersBC.FTPServers.Add(this); AddInfo("启动FTP服务成功!"); AddInfo("Ftp服务器运行中...[点击”停止“按钮停止FTP服务]"); while (true) { try { if (!TcpListener.Pending()) { } else { // 接收连接请求 TcpClient tcpClient = TcpListener.AcceptTcpClient(); AddInfo(string.Format("客户端({0})与本机({1})建立Ftp连接", tcpClient.Client.RemoteEndPoint, TcpListener.LocalEndpoint)); FTPUser user = new FTPUser(); user.commandSession = new FTPUserSeesion(tcpClient); user.workDir = this.FTPRoot ; Thread t = new Thread(FTPUserProcessing); t.IsBackground = true; t.Start(user); } } catch(Exception ex) { AddInfo(ex.ToString()); break; } } } catch (Exception ex) { if (TcpListener != null) { TcpListener.Stop(); } TcpListener = null; ListenThread.Abort(); LogUtil.SaveLog(ex.ToString()); } } 代码如上,但是隔了几个小时以后,server就连不上了。
peng2739956 2017-11-01
  • 打赏
  • 举报
回复
在什么情况下停止的

62,046

社区成员

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

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

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

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