【问题标题】:Ports for socket receiving and sending data in CC语言中socket接收和发送数据的端口
【发布时间】:2014-04-13 03:41:56
【问题描述】:

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

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

例如,在这种情况下 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));

【问题讨论】:

  • 有什么问题?如果您需要这样做,您可以发送到您自己的端口。
  • @EJP 首先感谢您的关注。我想将数据发送给另一个客户端。我的问题是:socked 与 PORT1 “绑定”。它可以通过PORT2发送东西吗?另外,PORT 1 可以和 PORT2 一样,否则我会收到任何错误,因为传入端口与传出端口相同?

标签: c sockets port


【解决方案1】:

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

计算机 A 计算机 B

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

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

另一个例子……

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

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

所以,更直接地回答您的问题; “PORT1可以和PORT2一样吗?”

答案:

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

【讨论】:

  • 感谢您的帮助。那么.. 如果 A 尝试通过 7777 发送数据而 B 通过 7777 向 A 发送数据会发生什么? PS:如果我输入 PORT1=7777 和 PORT2=7777 以及如果我输入 PORT1=7777 和 PORT2=6666,你能确认我写的代码是正确的吗?
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 2012-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多