我有服務器和客戶端程序用C編寫,工作正常,但我無法找出下面解釋的行爲的原因:服務器和客戶端顯示的公共端口號不同端口號
server.c
server_address.sin_family = AF_INET;
server_address.sin_port = htons(9374);
server_address.sin_addr.s_addr = htonl(INADDR_ANY);
server_len = sizeof(server_address);
bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
getsockname (server_sockfd, (struct sockaddr *)&server_address, &server_len);
printf("server port = %d\n", server_address.sin_port);
printf("Server Waiting......\n");
listen(server_sockfd, 5);
client.c
address.sin_family = AF_INET;
address.sin_port = htons(9374);
int length, result;
length = sizeof(address);
result = connect(sockfd, (struct sockaddr *)&address, length);
getsockname(sockfd, (struct sockaddr *)&address, &length);
printf("Connecting to Port = %d \n", address.sin_port);
個輸出服務器端:
[[email protected] Socket]# ./server
server port = 40484
Server Waiting......
在客戶端輸出:
[[email protected] Socket]# ./client
Connecting to Port = 18576
我的問題是:
雖然相同的端口號(9374
)和操作在服務器和客戶端代碼執行,但爲什麼他們顯示不同的端口號(例如服務器上的40484和客戶端上的18576)?
簡短的回答 - 你連接到一個已知的端口,你的sessio n被分配給其他未使用的端口。檢查接受和連接手冊頁,或嘗試http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html beej非常可讀,幾乎幽默。 – 2013-04-04 19:14:44