我有一个关于套接字如何在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));
答案 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):
如果两个系统上都有端口,请执行。 如果示例是针对单个系统的......获得的第二次尝试 端口(用于监听)将失败(在同一系统上)。