gpt4 book ai didi

c++ - 在ctor vs connect方法中 boost 套接字vs stream_socket端点

转载 作者:行者123 更新时间:2023-11-28 04:04:07 27 4
gpt4 key购买 nike

boost::basic_socketboost::basic_stream_socket;两者都有接受 const endpoint_type & endpointdocumentation 的构造函数说

An endpoint on the local machine to which the stream socket will be bound.

还有一个 connect 方法,其中 doc

peer_endpoint -- The remote endpoint to which the socket will be connected.

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

最佳答案

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

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

一般来说,任何套接字在与accept()connect() 或任何发送/接收方法一起使用之前都需要绑定(bind)。但是当你使用 connect() 系统调用时,系统会检查套接字是否已经绑定(bind),如果没有,它会为你绑定(bind)它,所以最好使用套接字作为客户端连接到服务器让操作系统绑定(bind)套接字,Windows 上的 ConnectEx 是个异常(exception),因为它不会自动绑定(bind)套接字,因此您需要自行绑定(bind)。

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

关于c++ - 在ctor vs connect方法中 boost 套接字vs stream_socket端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59029214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com