套接字在C中接收和发送数据的端口

时间:2014-04-13 03:41:56

标签: c sockets port

我有一个关于套接字如何在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));

1 个答案:

答案 0 :(得分:0)

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

计算机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相同吗?"

答案(S):

如果两个系统上都有端口,请执行。    如果示例是针对单个系统的......获得的第二次尝试     端口(用于监听)将失败(在同一系统上)。