在Socket通信中,为什么需要指定端口?端口由谁指定?端口的数据范围是怎样的?能否使用那些端口? socket通信中为什么要在服务器端进行端口绑定
SOCKET\u901a\u4fe1 \u5ba2\u6237\u7aef\u5982\u4f55\u6307\u5b9a\u7aef\u53e3\uff1f\u548c\u670d\u52a1\u5668\u7ed1\u5b9a\u7aef\u53e3\u4e00\u6837\uff0c\u53ea\u662f\u4e00\u822c\u5ba2\u6237\u7aef\u4e0d\u9700\u8981\u7ed1\u5b9a\u7aef\u53e3\u3002java\u5e94\u8be5\u4e5f\u53ef\u4ee5
struct sockaddr_in clientAddr;
clientAddr.sin_family = AF_INET;
clientAddr.sin_port = htons(6666);
clientAddr.sin_addr.S_un.S_addr = 0;
bind(sockClient, (struct sockaddr*)&clientAddr, sizeof(clientAddr));
\u5047\u5982\u4e00\u53f0\u673a\u5668\u4e0a\u6709\u591a\u4e2a\u7f51\u5361\uff0c\u670d\u52a1\u5668\u9700\u8981\u77e5\u9053\u4f60\u548c\u8fdb\u884c\u901a\u8baf\u7684\u662f\u54ea\u4e00\u4e2a\u5730\u5740\uff0c\u6240\u4ee5\u8981\u8fdb\u884c\u7ed1\u5b9a\uff0c\u5982\u679c\u53ea\u6709\u4e00\u4e2a\u7f51\u5361\uff0c\u53ea\u6709\u4e00\u4e2aIP\uff0c\u4e0d\u7ed1\u4e5f\u6ca1\u95ee\u9898
答:
- 因为在实际的通信当中,具体来讲并不是主机与主机之间的通信,而是应用进程之间的通信,在一个主机上,一般只有一块网卡,它的IP地址只有一个,但是运行在主机上的程序却是有很多个的,那如何区分这些程序呢,所以就要指定端口号;
- 端口号又分为两大类,服务器所使用的端口号和客户端所使用的端口号;
- 其中服务器所用的端口号码又分为熟知端口号(0~1023)和登记端口号(1024~49151),熟知端口号已经分配给TCP/IP当中的一些常用程序,如下图所示,因此我们在进行相关开发时,就不能选择熟知端口号;
4. 客户端使用的端口号范围为49152~65535。因为这类单口号仅在客户进程运行时动态选择,不需要我们人工指定,因此也叫短暂端口号。
绛旓細绛:鍥犱负鍦ㄥ疄闄呯殑閫氫俊褰撲腑锛屽叿浣撴潵璁插苟涓嶆槸涓绘満涓庝富鏈轰箣闂寸殑閫氫俊锛岃屾槸搴旂敤杩涚▼涔嬮棿鐨勯氫俊锛屽湪涓涓富鏈轰笂锛屼竴鑸彧鏈変竴鍧楃綉鍗★紝瀹冪殑IP鍦板潃鍙湁涓涓紝浣嗘槸杩愯鍦ㄤ富鏈轰笂鐨勭▼搴忓嵈鏄湁寰堝涓殑锛岄偅濡備綍鍖哄垎杩欎簺绋嬪簭鍛紝鎵浠ュ氨瑕佹寚瀹氱鍙e彿;绔彛鍙峰張鍒嗕负涓ゅぇ绫伙紝鏈嶅姟鍣ㄦ墍浣跨敤鐨勭鍙e彿鍜屽鎴风鎵浣跨敤鐨勭鍙e彿;...
绛旓細鍋囧涓鍙版満鍣ㄤ笂鏈夊涓綉鍗★紝鏈嶅姟鍣闇瑕鐭ラ亾浣犲拰杩涜閫氳鐨鏄摢涓涓湴鍧锛屾墍浠ヨ杩涜缁戝畾锛屽鏋滃彧鏈変竴涓綉鍗★紝鍙湁涓涓狪P锛屼笉缁戜篃娌¢棶棰
绛旓細鍦↙inux缂栫▼涓紝socket閫氫俊鏄竴绉嶉潪甯搁噸瑕佺殑鏈哄埗锛岀敤浜庡湪涓嶅悓杩涚▼涔嬮棿鎴栬呬笉鍚屼富鏈轰箣闂翠紶杈撴暟鎹銆係ocket鍙互琚湅浣滄槸涓涓鐐癸紝瀹冨厑璁哥▼搴忛氳繃缃戠粶閫氫俊鍗忚锛堝TCP/IP銆乁DP绛夛級杩涜鏁版嵁浼犺緭銆傚湪socket閫氫俊涓紝閫氬父娑夊強涓や釜涓昏鐨勬楠わ細寤虹珛杩炴帴鍜屾暟鎹紶杈撱傞鍏堬紝瀹㈡埛绔拰鏈嶅姟鍣ㄧ閮介渶瑕佸垱寤轰竴涓猻ocket瀵硅薄锛...
绛旓細Socket锛堝鎺ュ瓧锛夊瓨鍦ㄤ簬閫氫俊鍩熶腑锛閫氫俊鍩熸槸涓轰簡澶勭悊涓鑸殑绾跨▼閫氳繃Socket锛堝鎺ュ瓧锛夐氫俊鑰屽紩杩涚殑涓绉嶆娊璞℃蹇銆係ocket锛堝鎺ュ瓧锛夐氬父鍜屽悓涓涓煙涓殑Socket锛堝鎺ュ瓧锛変氦鎹㈡暟鎹(鏁版嵁浜ゆ崲涔熷彲鑳界┛瓒婂煙鐨勭晫闄愶紝浣嗚繖鏃朵竴瀹氳鎵ц鏌愮瑙i噴绋嬪簭)锛屽悇绉嶈繘绋嬩娇鐢ㄨ繖涓浉鍚岀殑鍩熶簰鐩镐箣闂寸敤Internet鍗忚绨囨潵杩涜閫氫俊銆係oc...
绛旓細闇瑕佸弻鏂圭殑閰嶅悎銆傚湪閫氫俊涓紝鏈嶅姟鍣ㄧ锛圫ocket鏈嶅姟鍣級鍜屽鎴风锛圫ocket瀹㈡埛绔級鍒嗗埆鎵紨鎺ュ惉鍜屾嫧鎵撶殑瑙掕壊銆傛湇鍔″櫒绔瓑寰呰繛鎺ヨ姹傦紝瀹㈡埛绔垯鍙戣捣杩炴帴銆係ocket瀹炰緥鐨勫垱寤哄寘鎷寚瀹歴ocket瀹舵棌锛堝IPv4鎴朓Pv6锛夈佽缃崗璁増鏈紙涓鑸负榛樿锛変互鍙婃寚瀹氭枃浠舵弿杩扮锛堥氬父鏃犻渶澶勭悊锛夈
绛旓細Socket骞挎硾搴旂敤浜庡悇绉嶇綉缁滄湇鍔′腑銆備緥濡傦紝鎴戜滑鍦ㄨ繘琛岀綉椤垫祻瑙堛佹枃浠朵紶杈撱佽繙绋嬬櫥褰曠瓑鎿嶄綔鏃讹紝鑳屽悗閮芥槸鍩轰簬Socket鐨勯氫俊銆傛澶栵紝鍦ㄥ紑鍙戜竴浜涚綉缁滃簲鐢ㄧ▼搴忔椂锛屽瀹炴椂鑱婂ぉ宸ュ叿銆佺綉缁滄父鎴忕瓑锛屼篃闇瑕浣跨敤鍒癝ocket鏉ヨ繘琛屽疄鏃舵暟鎹氦鎹傛荤殑鏉ヨ锛孲ocket鏄綉缁閫氫俊涓涓嶅彲鎴栫己鐨勪竴閮ㄥ垎锛屽畠鎻愪緵浜嗕竴绉嶆爣鍑嗙殑鏂瑰紡锛屼娇寰椾笉...
绛旓細Socket鎸囧鎺ュ瓧锛屽氨鏄缃戠粶涓笉鍚屼富鏈轰笂鐨勫簲鐢ㄨ繘绋嬩箣闂磋繘琛屽弻鍚閫氫俊鐨勭鐐圭殑鎶借薄銆備竴涓鎺ュ瓧灏辨槸缃戠粶涓婅繘绋嬮氫俊鐨勪竴绔紝鎻愪緵浜嗗簲鐢ㄥ眰杩涚▼鍒╃敤缃戠粶鍗忚浜ゆ崲鏁版嵁鐨勬満鍒躲備粠鎵澶勭殑鍦颁綅鏉ヨ锛屽鎺ュ瓧涓婅仈搴旂敤杩涚▼锛屼笅鑱旂綉缁滃崗璁爤锛屾槸搴旂敤绋嬪簭閫氳繃缃戠粶鍗忚杩涜閫氫俊鐨勬帴鍙o紝鏄簲鐢ㄧ▼搴忎笌缃戠粶鍗忚鏍堣繘琛屼氦浜掔殑...
绛旓細鍙﹀锛孲ocket杩樺彲浠ョ敤浜庡疄鐜板疄鏃堕氫俊鍔熻兘锛屽鑱婂ぉ搴旂敤绋嬪簭鎴栧湪绾挎父鎴忋傚敖绠Socket鍦ㄩ氫俊棰嗗煙涓槸涓椤瑰熀鏈妧鏈紝浣嗗畠浠嶇劧鏈変竴浜涙寫鎴樺拰闄愬埗銆傚叾涓箣涓灏辨槸瀹冨缃戠粶鐜鐨勮姹傛瘮杈冮珮锛岄渶瑕杈冨ソ鐨勭綉缁滆繛鎺ュ拰绋冲畾鎬с傚彟澶栵紝Socket杩橀渶瑕佸鐞嗚濡傛暟鎹垎鍖呫佷涪鍖呭拰寤惰繜绛夐棶棰橈紝鍥犳闇瑕佷竴瀹氱殑鎶鏈拰缁忛獙鎵嶈兘姝g‘鍦板疄鐜般
绛旓細Socket鏄疶CP/IP鍗忚鏍堜腑鐨勪竴涓噸瑕佺粍浠讹紝瀹冨湪搴旂敤绋嬪簭涔嬮棿鎻愪緵浜嗙浉浜掗氫俊鐨勬ˉ姊併傝捣鍒濓紝Socket鍦║NIX绯荤粺涓骞挎硾浣跨敤锛屾垚涓轰俊鎭紶閫掔殑涓昏鏂瑰紡銆傚湪Windows绯荤粺涓紝Socket鐨勫悕绉版槸WINSOCK銆Socket閫氫俊娑夊強涓や釜鏍稿績姒傚康锛氬鎴锋柟鍜屾湇鍔℃柟銆傚綋涓や釜搴旂敤绋嬪簭闇瑕閫氳繃Socket杩涜浜や簰鏃讹紝瀹冧滑闇瑕佸湪娼滃湪鐨勯氫俊鍙屾柟锛堝悓涓...
绛旓細瀹㈡埛绔娇鐢ㄩ殢鏈虹鍙o紝绌块廚AT鐨勬椂鍊欙紝NAT浼氫负鍏跺垎閰嶆柊绔彛锛岀劧鍚庤嚜鍔ㄥ缓绔嬬鍙f槧灏勩傝浆鎹㈠悗鐨勭鍙i殢鎶ユ枃鍙戝線鏈嶅姟绔傚緢绠鍗曠殑IP閫氫俊鍘熺悊鍟婏紝鎶ユ枃鑲畾鏈夋簮IP鍜屾簮绔彛鍙峰晩