关于TcpListener.Stop如何实现

wish907 2015-09-15 06:10:31
TcpListener是对Socket的包装,关于一个socket连接怎么样算是断开连接
EndDisconnect、Close、Shutdown这些的区别和作用
之前写了一个客户端小工具,想要在各种断开连接以后页面给一个按钮重新连接,于是就出现了这个问题。
虽然解决了,但是还是一知半解,肯定在某种情况下又会报错,所以想知道你们是如何处理的。
想知道TcpListener是怎么包装的
...全文
479 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wish907 2015-10-09
  • 打赏
  • 举报
回复
Disconnect 主动断开连接 会有等待时间 Shutdown 会发送一个空的信息提示结束 Close强制结束 可以在之前先使用Shutdown 并短暂延迟以便断开前 接收信息
wish907 2015-09-16
  • 打赏
  • 举报
回复
几乎每次发帖都没人
  • 打赏
  • 举报
回复
Close是销毁TcpListener整个对象占用的资源,没有去看内部的实现代码 但是MSDN上的是建议在关闭前,应该先调用Shutdown(),以避免连接的另一方出现连接超时的错误 Close是销毁TcpListener整个对象占用的资源,并且不必等待传数据发送完 MSDN上的是建议在关闭前,应该先调用Shutdown(),以保证数据传输的完整性并正常断开连接,否则连接的另一方要报读写超时的错误 Disconnect 断开连接,但不销毁socket,而Shutdown()是发送TCP的FIN置位的终止包,以便正常断开连接 https://msdn.microsoft.com/zh-cn/library/twketck3(v=VS.80).aspx
Poopaye 2015-09-16
  • 打赏
  • 举报
回复
		public void Stop()
		{
			if (Logging.On)
			{
				Logging.Enter(Logging.Sockets, this, "Stop", null);
			}
			if (this.m_ServerSocket != null)
			{
				this.m_ServerSocket.Close();
				this.m_ServerSocket = null;
			}
			this.m_Active = false;
			this.m_ServerSocket = new Socket(this.m_ServerSocketEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
			if (this.m_ExclusiveAddressUse)
			{
				this.m_ServerSocket.ExclusiveAddressUse = true;
			}
			if (Logging.On)
			{
				Logging.Exit(Logging.Sockets, this, "Stop", null);
			}
		}
mjp1234airen4385 2015-09-16
  • 打赏
  • 举报
回复
顶起

110,533

社区成员

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

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

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