gpt4 book ai didi

c++ - tcp 客户端可以使用相同的端口连接到不同的服务器吗?

转载 作者:可可西里 更新时间:2023-11-01 02:47:55 25 4
gpt4 key购买 nike

我想编写一个 tcp 服务器和客户端应用程序,它有几个彼此不同的连接,其中客户端使用相同的端口号。

到目前为止我明白了,服务器有一个监听器端口,当客户端调用它时,我会在服务器端为这个新连接获得一个新套接字,当我调用

accept();

对吧?所以在服务器端,我可以识别我与这个新套接字的连接并通过它发送数据。

现在我对客户端的理解有问题。当我打电话时我得到了我的套接字

socket(AF_INET, SOCK_STREAM, 0) 

所以我只有一个 socket 。在

connect() 

我可以指定远程地址等等。因此,当我正确理解它时,我可以使用一个套接字建立多个连接到不同的地址/端口对以创建不同的连接。对吧?

但是我现在如何在客户端中查看我从哪个逻辑连接接收数据,或者当 2 个逻辑连接在客户端使用相同的本地端口时我如何发送数据?在服务器端,当我有 2 个接受调用时,我有 2 个套接字,但是客户端呢?对于发送和接收,我只有一个套接字句柄?

或者我必须为客户端上的每个逻辑连接调用 socket() 吗?

最佳答案

I can specify remote adress and so on. So when I understand it correctly I can use one socket to make several connects to different adresses/port pairs to create different connections. Right?

没有。套接字是 IP 地址和端口号的组合。

Or do I have to call socket() for each logical connection on the client?

是的。

  • 在我看来,您之所以感到困惑,是因为您认为例如某个端口用于 SMTP 连接,而某个端口用于 HTTP 连接。

    好吧,单单那个端口并没有为你定义一个到服务器的套接字。服务器的 IP 地址正在更改。

    例如,考虑以下场景:

  1. You want to connection to Stackoverflow:

    Your PC – IP1+port 50500 ——– Stackoverflow IP2 + port 80 (standard http port)

    That is the combination IP1+50500 = the socket on the client computer and IP2 + port 80 = destination socket on the Stackoverflow server.

  2. Now you want to connect to gnu.org:

    your PC – IP1+port 50501 ——–gnu.org IP3 +port 80 (standard http port)

    The combination IP1+50501 = the socket on the client computer and IP3 + port 80 = destination socket on the gnu.org server.

最好查看 Beej's Network Programming了解更多。任何使用套接字的人都必须阅读它。

关于c++ - tcp 客户端可以使用相同的端口连接到不同的服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54761369/

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