gpt4 book ai didi

c - C语言中socket接收和发送数据的端口

转载 作者:行者123 更新时间:2023-11-30 17:35:14 24 4
gpt4 key购买 nike

我有一个关于 C 语言中套接字如何工作的问题。英语不是我的母语,但我会尽力解释我的问题。

我的函数应该能够发送接收数据。传出数据的端口必须与传入数据的端口不同。

例如,在这种情况下PORT1可以与PORT2相同吗?

int ds_sock;
ds_sock=socket(AF_INET, SOCK_DGRAM,0);
struct sockaddr_in my;
my.sin_family=AF_INET;
my.sin_port= PORT1;
my.sin_addr.s_addr=INADDR_ANY;
bind(ds_sock,&my,sizeof(my));

struct sockaddr_in Eaddr;
Eaddr.sin_family=AF_INET;
Eaddr.sin_port= PORT2;
Eaddr.sin_addr.s_addr=IP;
sendto(ds_sock,buff,1024,0,(struct sockaddr*)&Eaddr,sizeof(Eaddr));

最佳答案

理论上是的。这两个端口可能相同。考虑以下因素:

计算机 A 计算机 B

如果 A 想要发送给 B,A 必须知道 B 正在监听哪个端口。稍后,如果 B 想要发送给 A,B 必须知道 A 正在监听哪个端口。

有可能A正在监听7777端口;并且 b 也在监听端口 7777。在这种情况下,(在您的示例中)PORT1 可能与 PORT2 相同。

另一个例子...

如果 Web 浏览器希望向 stackoverflow.com 发送特定页面的请求,则该请求将发送到众所周知的端口 80 (stackoverflow.com:80),stackoverflow.com 服务器正在监听该端口。然后 stackoverflow.com 服务器必须将回复发送回 Web 浏览器。问题是,网络浏览器正在监听哪个端口?
Web 浏览器不太可能也在端口 80 上监听。相反,它正在监听由 Web 浏览器的系统动态分配的端口号。

当 Web 浏览器将请求发送到 stackoverflow.com 服务器时,它会通知服务器它将在 IP“源”地址中监听的套接字。

所以,为了更直接地回答你的问题; “PORT1 可以与 PORT2 相同吗?”

答案:

如果该端口在两个系统上都可用,则可以。 如果该示例针对单个系统...则不。第二次尝试获取 端口(用于监听)将失败(在同一系统上)。

关于c - C语言中socket接收和发送数据的端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23038851/

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