多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > php教程 > Linux網(wǎng)絡(luò)編程:綁定( bind )端口需要注意的問題

Linux網(wǎng)絡(luò)編程:綁定( bind )端口需要注意的問題

來源:程序員人生   發(fā)布時(shí)間:2015-03-30 08:24:49 閱讀次數(shù):3852次

所謂綁定(bind)是指他人連接我只能通過我所綁定的端口,相當(dāng)于,我買了1個(gè)手機(jī),他人要想聯(lián)系我,必須要知道我的手機(jī)號(hào)碼,這時(shí)候候,我需要怎樣辦呢?我需要給手機(jī)插上電話卡,固定1個(gè)電話號(hào)碼,這樣他人就可以通過這個(gè)電話號(hào)碼聯(lián)系我。手機(jī)插上電話卡,固定1個(gè)電話號(hào)碼,類似于綁定(bind)的進(jìn)程,綁定(bind)為了固定1個(gè)端口號(hào),別的網(wǎng)絡(luò)程序就能夠找到這個(gè)端口號(hào),找到這個(gè)端口號(hào)就可以找到這個(gè)端口號(hào)所對(duì)應(yīng)的網(wǎng)絡(luò)利用程序。


在網(wǎng)絡(luò)編程里,通常都是在服務(wù)器里綁定(bind)端口,這其實(shí)不是說客戶端里不能綁定(bind)端口,但這里需要注意的是,1個(gè)網(wǎng)絡(luò)利用程序只能綁定1個(gè)端口( 1個(gè)套接字只能 綁定1個(gè)端口 )。

1個(gè)套接字不能同時(shí)綁定多個(gè)端口,以下:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int argc, char *argv[]) { char server_ip[30] = "10.221.20.12"; int sockfd; sockfd = socket(AF_INET, SOCK_DGRAM, 0); //創(chuàng)建UDP套接字 if(sockfd < 0) { perror("socket"); exit(⑴); } // 初始化本地網(wǎng)絡(luò)信息 struct sockaddr_in my_addr; bzero(&my_addr, sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(8000); my_addr.sin_addr.s_addr = htonl(INADDR_ANY); // 第1次綁定端口8000 int err_log; err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr)); if(err_log != 0) { perror("bind 8000"); close(sockfd); exit(⑴); } // 又1次綁定別的端口9000, 會(huì)綁定失敗 my_addr.sin_port = htons(9000); err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr)); if(err_log != 0) { perror("bind 9000"); close(sockfd); exit(⑴); } close(sockfd); return 0; }


程序編譯運(yùn)行后結(jié)果以下:



如果客戶端想綁定端口號(hào),1定要調(diào)用發(fā)送信息函數(shù)之前綁定( bind )端口,由于在發(fā)送信息函數(shù)( sendto, 或 write ),系統(tǒng)會(huì)自動(dòng)給當(dāng)前網(wǎng)絡(luò)程序分配1個(gè)隨機(jī)端口號(hào),這相當(dāng)于隨機(jī)綁定了1個(gè)端口號(hào),這里只會(huì)分配1次,以后通訊就以這個(gè)隨機(jī)端口通訊,我們?cè)俳壎ǘ丝谔?hào)的話,就會(huì)綁定失敗。如果我們放在發(fā)送信息函數(shù)( sendto, 或 write )之前綁定,那樣程序?qū)⒁晕覀兘壎ǖ亩丝谔?hào)發(fā)送信息,不會(huì)再隨機(jī)分配1個(gè)端口號(hào)。


綁定失敗例子( UDP )以下:

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> int main(int argc, char *argv[]) { char server_ip[30] = "10.221.20.12"; int sockfd; sockfd = socket(AF_INET, SOCK_DGRAM, 0); //創(chuàng)建UDP套接字 if(sockfd < 0) { perror("socket"); exit(⑴); } struct sockaddr_in dest_addr; bzero(&dest_addr, sizeof(dest_addr)); dest_addr.sin_family = AF_INET; dest_addr.sin_port = htons(8080); // 服務(wù)器的端口 inet_pton(AF_INET, server_ip, &dest_addr.sin_addr); char send_buf[512] = "this is for test"; // 如果前面沒有綁定端口,sendto()系統(tǒng)會(huì)隨機(jī)分配1個(gè)端口 sendto(sockfd, send_buf, strlen(send_buf), 0, (struct sockaddr*)&dest_addr, sizeof(dest_addr));//發(fā)送數(shù)據(jù) // 初始化本地網(wǎng)絡(luò)信息 struct sockaddr_in my_addr; bzero(&my_addr, sizeof(my_addr)); my_addr.sin_family = AF_INET; my_addr.sin_port = htons(8000); my_addr.sin_addr.s_addr = htonl(INADDR_ANY); // sendto()后面綁定端口,綁定失敗 int err_log; err_log = bind(sockfd, (struct sockaddr*)&my_addr, sizeof(my_addr)); if(err_log != 0) { perror("bind 8000"); close(sockfd); exit(⑴); } close(sockfd); return 0; }


程序編譯運(yùn)行后結(jié)果以下:



源代碼下載請(qǐng)點(diǎn)此處。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲一级色 | 亚洲三级欧美 | jiz欧美高清 | 欧美性高清极品猛交 | 国产内地激情精品毛片在线一 | 国内成人自拍视频 | japanese日本护士18 | 日韩91| 色琪琪永久远网址 | 日韩久久综合 | 黄色h视频 | 一区二区三区四区五区 | 日韩亚洲欧美日本精品va | 国产一区二区三区免费播放 | 国产亚洲精品日韩已满十八 | 国产一级毛片欧美视频 | 国内精品伊人久久大香线焦 | 视频在线视频免费观看 | 天天拍久久| 亚洲欧美日韩在线精品一区二区 | 欧美一级特黄毛片视频 | videoa性欧美| 亚洲天天做夜夜做天天欢 | 91成年影院 | 国产精品60岁老女人 | 日韩爱爱片 | 亚洲综合一区二区精品久久 | 亚洲国产成人久久精品图片 | 手机看片手机在线看片 | 美女福利在线观看 | 九九精品视频一区二区三区 | 黑人和黑人激情一级毛片 | 国产成人综合亚洲欧洲色就色 | 欧美色综合久久 | 国产一级做人爱c黑人版 | 国产三级精品在线观看 | 国产精品网站 夜色 | 久久精品欧美日韩精品 | 秋霞免费手机理论视频在线观看 | 91精品综合久久久久3d动漫 | 国产内地激情精品毛片在线一 |