看板 b95902HW 關於我們 聯絡資訊
//在單班Project2中會用到 //要回傳給Server自己的IP和所使用的Port number //但由於我們習慣建好socket之後就直接connection //讓connect()自己幫我們找到一個free的port number來bind上去 //所以我們就必須利用getsockname()這個function //來查詢某個socket的local port number 上面是我誤解project2在login時要傳送的port的講法,請大家忽略 真正的是要開一個socket並且bind一個port來listen所有欲傳送檔案的人的連線 所以沒有以上的問題,是我搞錯了 使用方法: #include <sys/socket.h> int getsockname(int sockfd, struct sockaddr *addr, socklen_t *len); int getpeername(int sockfd, struct sockaddr *addr, socklen_t *len); 這兩個function是一對的,getsockname()可以取得local address和local port number 而getpeername()可以取得remote address和remote port number sockfd: file descriptor of the socket addr: 和connection時要使用的structure一樣 len: the size of the struct sockaddr Return value: 0 if OK, -1 on error Example: //假設我們已經有一個建立好連線的socket,名為sockfd #include <sys/socket.h> //for those two function #include <netinet/in.h> //for struct sockaddr_in struct sockaddr_in local_sockaddr, remote_sockaddr; socklen_t len; len=sizeof(struct sockaddr_in); if(getsockname(sockfd, &local_sockaddr, &len)==-1) { perror("getsockname"); } if(getpeername(sockfd, &remote_sockaddr, &len)==-1) { perror("getpeername"); } 詳細內容可參照系程課本p562 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.245.9 ※ 編輯: mycallmax 來自: 140.112.245.9 (05/11 20:21)