簡體   English   中英

C中用於套接字接收和發送數據的端口

[英]Ports for socket receiving and sending data in C

我有一個關於套接字如何在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瀏覽器正在監聽哪個端口?
Web瀏覽器不太可能也在端口80上偵聽。相反,它正在偵聽由Web瀏覽器系統動態分配的端口號。

當Web瀏覽器將請求發送到stackoverflow.com服務器時,它通知服務器它將在IP“源”地址中監聽的套接字。

因此,可以更直接地回答您的問題; “ PORT1可以和PORT2一樣嗎?”

答案:

如果兩個系統上的端口均可用,則可以。 如果該示例是針對單個系統的...否。 第二次嘗試獲取端口(用於偵聽)的嘗試將失敗(在同一系統上)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM