BeginAccept 方法后无法关闭套接字

2023-11-27

我有一个 C# 程序,在其中创建一个套接字,绑定它,开始监听,然后使用 beginaccept! 但是当我尝试关闭\关闭套接字时,我从 beginaccept AsyncCallback 方法中得到异常!

     private void start_listening()
        {

            main_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint iplocal = new IPEndPoint(IPAddress.Any, 11150);
            main_socket.Bind(iplocal);
            main_socket.Listen(5);
            main_socket.BeginAccept(new AsyncCallback(OnClientConnect), null);
          }


        private void Disconnect_Click(object sender, EventArgs e)
        {
            main_socket.Shutdown(SocketShutdown.Both);
            main_socket.Close();
        }

        public void OnClientConnect(IAsyncResult asyn)
        {

            try
            {
                clients[connected_clients] = new Client("CHANGEME", "127.0.0.1", this);
                clients[connected_clients].Socket = main_socket.EndAccept(asyn);
                clients[connected_clients].WaitForData();
                main_socket.BeginAccept(OnClientConnect, null);
            }
            catch (SocketException se)
            {
                MessageBox.Show(se.Message);
            }
}

非常感谢!


当 main_socket 关闭时,OnClientConnect() 将被调用,但 main_socket.EndAccept() 应该抛出 ObjectDisposeException。也许您想捕获该异常并将其视为“侦听器套接字已关闭”消息。

您的代码的另一个问题是 main_socket 实际上没有连接到任何东西。在 Disconnect_Click() 中调用 main_socket.Shutdown() 也可能会抛出异常,但这一次应该是 SocketException,表示套接字未连接。我会删除 main_socket.Shutdown() 调用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BeginAccept 方法后无法关闭套接字 的相关文章

  • 使用 xmlns 属性(命名空间)查询 XDocument

    我尝试从 Visual Studio csproj 文件查询元素 我创建了一个简短的示例来说明该问题 Working string xml1
  • pop() 期间提升 Fibonacci 堆访问冲突

    Context 我目前正在实现某种形式的 A 算法 我决定使用 boost 的斐波那契堆作为底层优先级队列 我的图表是在算法运行时构建的 作为我使用的顶点对象 class Vertex public Vertex double double
  • 替换大字符串中的多个字符串的最快方法

    我正在寻找替换大 1mb 字符串的多个 500 子字符串的最快方法 无论我尝试过什么 String Replace 似乎都是最快的方法 我只关心最快的方式 不是代码的可读性 可维护性等 我不在乎是否需要使用不安全的代码或预处理原始字符串 每
  • 共享库 C++ Makefile

    我需要编译胖二进制文件才能在另一台 Linux 机器上使用它 但缺少一些库 因此据我了解 我应该使用一些 shared 选项来编译它 但我不明白如何为此配置 Makefile 目前我的 makefile 如下所示 CC g CC FLAGS
  • 如何使用 lstat() 确定是否为硬链接

    我的操作系统是linux 我用 C 编程 我知道我可以使用 lstat 来识别软链接 即使用 S ISLNK st st mode 但我如何识别该链接是硬链接呢 如果链接是硬链接 它将被视为常规文件 但是 我还想区分常规文件和硬链接 有什么
  • 如何使用仿函数作为类模板中的成员?

    我试图使用函子作为std function类模板内的对象 以下是我到目前为止所做的事情 the functor class template template
  • 在 C 中使用模板函数的最短示例?

    我如何处理函数echo tpl可以采取1类型参数int or string 然后打印出来 C没有模板 我认为你能做的最好的事情就是使用联合或让函数具有不同的名称 后一种具有不同名称的方法是准标准方法 例如fabs fabsf fabsl a
  • 为什么要在 C 和 C++ 项目中创建 include/ 目录?

    当我处理我的个人 C 和 C 项目时 我通常把file h and file cpp在同一目录中 然后file cpp可以参考file h with a include file h 指示 然而 通常会发现库和其他类型的项目 如 linux
  • C# 中的 memcpy 函数 [重复]

    这个问题在这里已经有答案了 可能的重复 C memcpy 等效项 https stackoverflow com questions 510971 c memcpy equivalent 相当于什么memcpyC 中的函数 正如已经说过的
  • 处理可选依赖项 (C#)

    我们有一个可以选择与 TFS 集成的应用程序 但是由于集成是可选的 所以我显然不希望所有机器都需要 TFS 程序集作为要求 我应该怎么办 我是否可以在主程序集中引用 TFS 库 并确保在使用 TFS 集成时仅引用 TFS 相关对象 或者 更
  • 在 UserControl C# .NET 中添加/停靠控件

    我正在编写一个 UserControl 它以编程方式添加子控件 目前我正在添加新的控件 如下所示 this Controls Add new Control Height 16 Dock DockStyle Top 我遇到的问题是新控件添加
  • CMake include_directories 和 add_subdirectories 之间的区别?

    我正在学习 CMake 来构建 C 代码 并努力解决以下概念 在我的根级目录中 我有一些 cpp 文件和 CMakeLists txt 它们在 gen cpp 目录中成功生成了一些 thrift 代码 我的根级别 CMakeLists tx
  • 使用自定义对象的动态列表并且无法动态更改dataGrid的单元格属性

    我刚开始在 Stack 上发帖 我已经搜索了很长一段时间来解决与我类似的问题 我试图根据对象的布尔值动态地将 WinForms DataGridView 中的复选框从非只读更改为只读 它在调试模式下显示更改已经发生 但是一旦完全运行 应该只
  • C++ 中的结构填充

    如果我有一个struct在 C 中 有没有办法安全地将其读 写到跨平台 编译器兼容的文件中 因为如果我理解正确的话 每个编译器都会根据目标平台进行不同的 填充 不 那是不可能的 这是因为C 在二进制层面缺乏标准化 Don Box http
  • NHibernate 继承 - 判别器值

    NHibernate 是否可以有一个像这样工作的判别器 如果值等于 String Empty gt Class1 其他 gt Class2 我已经有一个 CultureName 字符串列 我想将其用作鉴别器 我不想添加额外的布尔列 如果 C
  • Linux 相当于 GetCommandLine 和 CommandLineToArgv?

    我想知道是否有一些 API 可以在 Linux 上获取当前进程的命令行参数 我想我是非常不清楚的 该问题的真正目的是通过命令行参数传递 unicode 文件名 从文件中读取 proc self cmdline 例如 wallyk zf od
  • 像 MS Excel 一样在 C++ 中舍入双精度值

    我在网上进行了搜索 但找不到解决我的问题的方法 我只是想要一个像 MS Excel 那样对双精度值进行舍入的函数 这是我的代码 include
  • 在 QML 中使用 C++ 枚举作为字符串

    我想做的是在 C 中使用以下枚举 class MyClass public QQuickItem Q OBJECT Q PROPERTY MyEnum enumValue READ getEnumValue public enum MyEn
  • Action 的通用约束未按预期工作

    我无法理解为什么以下代码片段没有给我错误 public void SomeMethod
  • 在 Outlook 中检索当前电子邮件正文

    在我的 Outlook 插件中 我想在功能区上添加一个按钮 因此当用户单击此按钮时 我想检索当前选定的电子邮件的正文 我有此代码 但它只检索收件箱中的第一封电子邮件 因为索引为 1 Microsoft Office Interop Outl

随机推荐

  • Linux新手问题:GCC编译器输出

    我对 Linux 完全是个新手 我在笔记本电脑上安装了 Mint 最近一直在玩它 我写了一个简单的C程序并保存了文件 然后在命令行中我输入 gcc c myfile 然后弹出一个名为 a out 的文件 我天真地 在使用 Windows 多
  • 如何从 XML 反序列化抽象类的具体实现

    我有一个带有几个具体实现的抽象类 这需要序列化为 XML 才能发送到另一个系统 这工作正常 但是 我还需要能够反序列化相同的 XML 结构 无论我如何尝试 我似乎都无法做到这一点 我的班级结构如下 抽象类 XmlIncludeAttribu
  • 为什么 MAX() 比 ORDER BY ... LIMIT 1 慢 100 倍?

    我有一张桌子foo与 以及其他 20 个 列bar baz and quux索引打开baz and quux 该表有约 500k 行 为什么以下查询的速度差异如此之大 查询A需要0 3秒 而查询B需要28秒 Query A select b
  • 在 R 中读取空格分隔的数字

    我在 R 中有这个字符串 numbers lt 4 4956 1 00e 09 50 9 1 244 47 1 1 04 5 5 0 499 13 9 0 我应该将数字读入向量中 现在我可以找到其他语言的相同线程 但这里找不到 R 的线程
  • 如何将保存图像更改为文件默认名称?

    我有一个由 Caman js 创建的画布 HTML5 标签 当我在 FF 中单击右键并保存到文件时 文件的默认名称是 canvas png 由于我创建了很多文件并需要保存它们 这很不幸 因为我需要为每个文件设置不同的名称 我想要完成的是 当
  • 如何在 SQLExpress 文本字段中插入中文字符?

    如何在 SQLExpress 文本字段中插入中文字符 我使用的是 VS 2008 中的 SQL Express 当我添加中文字符时 无论是通过我编写的导入应用程序还是从 Visual Studio 内的数据视图粘贴它们 它们最终都会变成问号
  • View.OnClickListener() 函数或接口

    View OnClickListener 是函数还是接口 当我们尝试在 android 中设置 onclicklistener 方法时 我们使用 new View OnClickListener 据我所知 它让我感到烦恼 我们不需要初始化包
  • 回调函数的用处

    在 Javascript 中 可以定义一个函数 X 并将其作为参数传递给另一个函数 Y 这样的函数 X 称为callback function 您能否解释为什么在一些清晰的示例中使用回调函数很有用 例如发送一些带有演示的小提琴链接 我可以看
  • 根据文本区域的宽度计算文本大小

    我有一个文本应该设置为具有指定宽度的 TextView 它需要计算文本大小以适合 TextView 换句话说 有没有办法让文本适合 TextView 区域 就像 ImageView 比例类型功能一样 这应该是一个简单的解决方案 public
  • 如何使用 Objective-C++ 在 C++ 类中添加观察者到 NSNotificationCenter?

    我有一个 C 类 最近从 cpp 重命名为 mm 以支持 Objective C 所以我可以添加以下 Objective C 代码 NSNotificationCenter defaultCenter addObserver self se
  • 使用 Razor 的条件 HTML 属性

    变量 strCSSClass 通常有一个值 但有时为空 我不想在此输入元素的 HTML 中包含空的 class 这意味着如果 strCSSClass 为空 我根本不需要 class 属性 以下是执行条件 HTML 属性的一种方法
  • Spring@计划于每天凌晨 4:00 至 4:30 之间的随机分钟开始

    正如问题标题所述 我需要设置 Spring Scheduler 它将运行方法以每天凌晨 4 点左右将某些内容从数据库加载到内存中 问题是我有该服务器的多个实例 我不希望所有实例同时开始执行 因为它会减慢数据库的速度 所以我希望时间是 4 0
  • 如何将 UWP 目标添加到现有 Xamarin Forms 项目?

    我有一个现有的 Xamarin Forms 应用程序 设置为针对 Android 和 iOS 构建 我想添加 UWP 目标 以便可以查看应用程序在 Windows 上的执行情况 我想我可以做到这一点 而无需为 Windows 创建新的 UI
  • Egit 将 Eclipse 项目文件夹添加到 git 存储库

    我在 BitBucket 上创建了一个新的空 git 存储库 现在我想将其链接到 Eclipse 我将存储库添加到 Git Repositories 视图中 并创建了一个同名的新项目 我选择 团队 gt 共享项目 然后提交并推送到上游 现在
  • 更新 RestKit 'lcl_RK.h' 文件在 RKLog.h 中找不到

    我在 Xcode 7 1 中安装 RestKit v0 25 0 和 CocoaPods v0 39 并遇到导入问题 当我使用 CocoaPods v0 38 2 时 一切都很棒 找不到 RKHTTPUtilities h 文件 它在 PO
  • numpy数组赋值问题

    我在使用 Numpy 的 Python 2 6 5 中遇到了一个奇怪的问题 我分配一个 numpy 数组 然后将一个新变量等同于它 当我对新数组执行任何操作时 原始数组的值也会发生变化 这是为什么 请看下面的例子 请启发我 因为我对 Pyt
  • R 求和向量列表中的元素 X

    我刚刚开始做一些 R 脚本 但我无法解决这个问题 我有一个向量列表可以说 myListOfVector lt list c 1 2 c 1 2 c 1 2 c 1 2 我想要的是列表中每个向量的每个 X 元素的总和 基于元素的位置 这样 如
  • 在c中生成具有特定分布的随机数

    我需要一个具有生成随机数 给定平均值 标准差以及使用三种分布之一 指数分布 正态分布或统一分布 的函数的库 即使三者之一也会有帮助 我正在寻找这样的东西 http www codeproject com KB recipes zigurat
  • 在 moment.js 中获取该月的最后一个星期一

    有没有办法使用 moment js 获取该月的最后一个星期一 我知道我可以通过以下方式得到月底 moment endOf month 但上周一怎么样 你快到了 您只需要添加一个简单的循环来逐天向后移动 直到找到星期一 result mome
  • BeginAccept 方法后无法关闭套接字

    我有一个 C 程序 在其中创建一个套接字 绑定它 开始监听 然后使用 beginaccept 但是当我尝试关闭 关闭套接字时 我从 beginaccept AsyncCallback 方法中得到异常 private void start l