首页 > 解决方案 > ctor vs connect方法中的boost socket vs stream_socket端点

问题描述

boost::basic_socketboost::basic_stream_socket; 两者都有接受的构造函数const endpoint_type & endpoint文档

流套接字将绑定到的本地计算机上的端点。

但是有一种connect方法,医生

peer_endpoint -- 套接字将连接到的远程端点。

它是如何工作的,是什么?当我编写客户端时,我会创建一个套接字,而不是在 ctor 中提供端点,然后调用 connect 然后进行读/写。在编写服务器时,我会使用 ctor 端点而不是调用连接?普通套接字和流套接字有什么区别?

标签: c++socketsboost

解决方案


在ctor中,端点将用于bind()将套接字绑定到本地机器中的地址和端口

在连接中,端点代表您要连接的远程地址和端口

accept()一般来说,任何套接字在与orconnect()或任何 send/recv 方法一起使用之前都需要绑定。但是当您使用connect()系统调用时,系统会检查套接字是否已经绑定,如果没有,它会为您绑定它,因此最好使用套接字作为客户端连接到服务器以让操作系统为您绑定套接字,有一个例外在ConnectExWindows 上,因为它不会自动绑定套接字,所以你有责任自己绑定它。

对于服务器,情况有所不同,因为您将接受器套接字绑定到本地地址并且端口客户端正在连接,因此操作系统无法推断您希望接收连接的地址或端口以便为您绑定套接字,作为结果您必须bind()使用您选择的地址和端口显式调用


推荐阅读