c++ - ctor vs connect方法中的boost socket vs stream_socket端点
问题描述
有boost::basic_socket
和boost::basic_stream_socket
; 两者都有接受的构造函数const endpoint_type & endpoint
,文档说
流套接字将绑定到的本地计算机上的端点。
但是有一种connect
方法,医生说
peer_endpoint -- 套接字将连接到的远程端点。
它是如何工作的,是什么?当我编写客户端时,我会创建一个套接字,而不是在 ctor 中提供端点,然后调用 connect 然后进行读/写。在编写服务器时,我会使用 ctor 端点而不是调用连接?普通套接字和流套接字有什么区别?
解决方案
在ctor中,端点将用于bind()
将套接字绑定到本地机器中的地址和端口
在连接中,端点代表您要连接的远程地址和端口
accept()
一般来说,任何套接字在与orconnect()
或任何 send/recv 方法一起使用之前都需要绑定。但是当您使用connect()
系统调用时,系统会检查套接字是否已经绑定,如果没有,它会为您绑定它,因此最好使用套接字作为客户端连接到服务器以让操作系统为您绑定套接字,有一个例外在ConnectEx
Windows 上,因为它不会自动绑定套接字,所以你有责任自己绑定它。
对于服务器,情况有所不同,因为您将接受器套接字绑定到本地地址并且端口客户端正在连接,因此操作系统无法推断您希望接收连接的地址或端口以便为您绑定套接字,作为结果您必须bind()
使用您选择的地址和端口显式调用
推荐阅读
- java - 用于 double ** 内任何内容的 Java 正则表达式 ** 示例:**text**
- c - 带有 max() 的 OpenACC 缩减子句
- python - 在 Pandas 中创建布尔值频率的汇总表
- html - 内联块无法在 HTML 电子邮件中工作时遇到问题
- javascript - 获取 API 调用的异步问题 - console.log() 有效,但 setState 无效
- javascript - React native 只运行一次,现在它给了我错误
- python - 如何使用一个命令提取 numpy 数组的切片和特定列?
- rust - 如何在 Rust 中使用 `dlsym()`
- ruby-on-rails - ActionText:具有表格支持和白名单属性的自定义附件(如样式)
- unity3d - 在 Ubuntu 中使用 Unity,但为 Windows 平台构建