在使用套接字时,我发现了以下代码:

using System.Net.Sockets;
...
private Socket _socket;
...
_socket.Blocking = false;
_socket.Bind(GetCurrentServerIpAddress());
_socket.BeginConnect(endpoint, OnConnect, _socket);

GetCurrentServerIpAddress()的结果是我需要连接的机器的IP地址.由于我不理解Bind()方法的作用,我已将其从源代码中删除,并且我看不出行为上有什么不同:连接是在需要时创建和修复的,所以我的问题非常简单:

_socket.Bind()方法的作用是什么?当我移除它时,可以预见到的效果是什么?

提前谢谢你

推荐答案

.NET文档对此有一个相当模糊的解释here.

如果需要使用特定的本地终结点,请使用Bind方法.必须先调用BIND,然后才能调用Listen方法.除非需要使用特定的本地终结点,否则在使用Connect方法之前不需要调用Bind.您可以在无连接和面向连接的协议上使用绑定方法.

在这里,它们强调您不需要在连接之前绑定IP,只有当您想要调用listen()方法时才需要绑定.

在仅在Socket类上搜索了多个示例之后,我并没有真正看到有人实现Bind().因此,除非您计划使用Listen()方法,否则我会说删除它是安全的

Csharp相关问答推荐

在WPF.NET 6中使用C++/WinRT组件(但实际上是任何WinRT组件)

我可以 suppress 规则CS 9035一次吗?

ASP.NET MVC购物车数量更新并从购物车中删除项目

始终保留数组中的最后N个值,丢弃最老的

使页面内容居中

Azure DEVOPS找不到定制的Nuget包

自动映射程序在GroupBy之后使用项目

使用C#HttpClient以多部分形式数据发送带有非ASCII文件名的文件的问题

我想在文本框悬停时在其底部显示一条线

C#阻塞调用或await calling inside calling方法

TeamsBot SendActivityActivityTypes与ActivityTypes同步.键入不再起作用

如何将%{v_扩展}转换为%{v_扩展}>>

当try 测试具有协变返回类型的抽象属性时,类似功能引发System.ArgumentException

如何在使用Google.Drive.apis.V3下载文件/文件夹之前压缩?

如何在C#控制台应用程序中获取用户输入并将其作为订单项目进行处理?

在Visual Studio 2022中查找Xamarin模板时遇到问题

如果所有";async任务方法()";调用都返回Task.FromResult()-是否同步执行?

为什么我的UserControl没有加载到我的主窗口中?

如何使用moq和xUnit对删除操作进行单元测试?

为什么我不能在固定语句中使用外部函数?