一個埠號可以同時被兩個進程綁定嗎?

2020-12-23 51CTO

 

一、1個埠號可以同時被兩個進程綁定嗎?

根據埠號的綁定我們分以下幾種情況來討論:

2個進程分別建立TCP server,使用同一個埠號8888

2個進程分別建立UDP server,使用同一個埠號8888

2個進程1個建立TCP server、1個建立UDP server,都使用埠號8888

1. 測試代碼

我們首先編寫兩個簡單的測試程序。

tcp.c

該程序僅僅創建tcp套接字並綁定埠號8888,沒有accept建立連接操作,並且sleep(1000),讓進程不要太快退出。

  1. /*******伺服器程序  TCPServer.c ************/ 
  2. #include <stdlib.h> 
  3. #include <stdio.h> 
  4. #include <errno.h> 
  5. #include <string.h> 
  6. #include <netdb.h> 
  7. #include <sys/types.h> 
  8. #include <netinet/in.h> 
  9. #include <sys/socket.h> 
  10. #include <pthread.h> 
  11.  
  12. #define WAITBUF 10 
  13. #define RECVBUFSIZE 1024 
  14.  
  15.  
  16. int main(int argc, char *argv[]) 
  17.  int sockfd,new_fd,nbytes; 
  18.  struct sockaddr_in server_addr; 
  19.  struct sockaddr_in client_addr; 
  20.  int portnumber = 8888; 
  21.  socklen_t sin_size; 
  22.  char hello[512]; 
  23.  char buffer[RECVBUFSIZE]; 
  24.  
  25.  /*埠號不對,退出*/ 
  26.  
  27.  /*伺服器端開始建立socket描述符*/ 
  28.  if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)   
  29.  { 
  30.   fprintf(stderr,"Socket error:%s\n\a",strerror(errno)); 
  31.   exit(1); 
  32.  } 
  33.  
  34.  /*伺服器端填充 sockaddr結構*/  
  35.  bzero(&server_addr,sizeof(struct sockaddr_in)); 
  36.  server_addr.sin_family=AF_INET; 
  37.  /*自動填充主機IP*/ 
  38.  server_addr.sin_addr.s_addr=htonl(INADDR_ANY); 
  39.  server_addr.sin_port=htons(portnumber); 
  40.  
  41.  /*捆綁sockfd描述符   進程+埠號+ip+socket*/  
  42.  if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) 
  43.  { 
  44.   fprintf(stderr,"Bind error:%s\n\a",strerror(errno)); 
  45.   exit(1); 
  46.  } 
  47.  
  48.  /*監聽sockfd描述符*/ 
  49.  if(listen(sockfd, WAITBUF)==-1) 
  50.  { 
  51.   fprintf(stderr,"Listen error:%s\n\a",strerror(errno)); 
  52.   exit(1); 
  53.  } 
  54.  
  55.  sleep(1000);//讓程序不要這麼快的退出 
  56.  close(sockfd); 
  57.  exit(0); 

udp.c

該程序僅僅創建udp套接字並綁定埠號8888,沒有accept建立連接操作,並且sleep(1000),讓進程不要太快退出.

  1. #include <stdlib.h> 
  2. #include <stdio.h> 
  3. #include <errno.h> 
  4. #include <string.h> 
  5. #include <unistd.h> 
  6. #include <netdb.h> 
  7. #include <sys/socket.h> 
  8. #include <netinet/in.h> 
  9. #include <sys/types.h> 
  10. #include <arpa/inet.h> 
  11.  
  12. #define SERVER_PORT 8888  
  13. #define MAX_MSG_SIZE 1024  
  14.  
  15.  
  16. int main(void)  
  17. {  
  18.  int sockfd;  
  19.  struct sockaddr_in addr;  
  20.  
  21.  /* 伺服器端開始建立socket描述符 */  
  22.  sockfd=socket(AF_INET,SOCK_DGRAM,0);  
  23.  if(sockfd<0)  
  24.  {  
  25.   fprintf(stderr,"Socket Error:%s\n",strerror(errno));  
  26.   exit(1);  
  27.  }  
  28.  
  29.  /* 伺服器端填充 sockaddr結構 */  
  30.  bzero(&addr,sizeof(struct sockaddr_in));  
  31.  addr.sin_family=AF_INET;  
  32.  addr.sin_addr.s_addr=htonl(INADDR_ANY);  
  33.  addr.sin_port=htons(SERVER_PORT);  
  34.  
  35.  /* 捆綁sockfd描述符 */  
  36.  if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)  
  37.  {  
  38.   fprintf(stderr,"Bind Error:%s\n",strerror(errno));  
  39.   exit(1);  
  40.  }  
  41.  sleep(1000); 
  42.  close(sockfd);  
  43. }  

編譯

  1. gcc tcp.c -o tcp 
  2. gcc udp.c -o udp 

2. 執行結果

1).2個進程分別建立TCP server

情況1執行結果

從結果可知,第二個進程綁定埠號8888綁定失敗。

2).2個進程分別建立UDP server

情況2執行結果

從結果可知,第二個進程綁定埠號8888綁定失敗。

3).1個建立TCP server、1個建立UDP server

情況3執行結果

用netstat命令查看信息。

netstat

從結果可知,該種情形,兩個進程分別綁定成功。

3. 結果分析

由上述結果可知:TCP、UDP可以同時綁定一個埠8888,但是一個埠在同一時刻不可以被TCP或者UDP綁定2次。原因如下:

tcp的埠不是物理概念,僅僅是協議棧中的兩個字節;

TCP和UDP的埠完全沒有任何關係,完全有可能又有一種XXP基於IP,也有埠的概念,這是完全可能的;

TCP和UDP傳輸協議監聽同一個埠後,接收數據互不影響,不衝突。因為數據接收時時根據五元組**{傳輸協議,源IP,目的IP,源埠,目的埠}**判斷接受者的。

二、埠號的一些其他知識點

1. 埠號的作用

埠號可以用來標識同一個主機上通信的不同應用程式,埠號+IP位址就可以組成一個套接字,用來標識一個進程。

2. 埠號的應用場景

在TCP/IP協議中,用「源IP位址」,「目的IP位址」,「源埠號」,「目的埠號」,協議號(IP協議的協議號為4,TCP的協議號為6)這樣的一個五元組來標識一個通信,通信的雙方在發送消息時,消息的頭部會帶著這樣的五元組。

3. 埠範圍劃分

(1)0~1023:知名埠號,是留著備用的,一把都是用於協議,例如HTTP、FTP、SSH ;

(2)1024~65535:是作業系統動態分配的埠號,客戶端程序的埠號,就是由操作糸統從這個範圍來分配的,在TCP與UDP的套接字通信中,客戶端的埠號就是在此範圍中。

4. 知名的埠號與埠號對應的伺服器

比如:

  1. HTTP伺服器:80  
  2. FTP伺服器:21 

ps:FTP有一個控制連接和一個數據連接,所以FTP是有兩個埠號的,控制連接的埠號是21,數據連接的埠號是20,但是如果FTP的埠號默認是21,如果指明FTP有兩個埠號的話,那就是21和20,否則FTP伺服器的埠號就是21

  1. TELNET伺服器:23  
  2.  SSH伺服器:22  
  3.  HTTPS:443  
  4.  WEB伺服器:25 

5. 在linux中如何查看知名埠號?

  1. cat /etc/services 

6. 一個進程是否可以bind多個埠號?

可以

因為一個進程可以打開多個文件描述符,而每個文件描述符都對應一個埠號,所以一個進程可以綁定多個埠號。

Linux內核會給每一個socket分配一個唯一的文件描述符,進程通過該文件描述符來區分對應的套接字。

7. 一個埠號是否可以被多個進程綁定?

同種協議通常不可以,但有一種情況可以。

ps:如果進程先綁定一個埠號,然後在fork一個子進程,這樣的話就可以是實現多個進程綁定一個埠號,但是兩個不同的進程綁定同一個埠號是不可以的。

三、SO_REUSEADDR有什麼用處和怎麼使用?

當兩個socket的address和port相衝突,而我們又想重用地址和埠,則舊的socket和新的socket都要已經被設置了SO_REUSEADDR特性,只有兩者之一有這個特性還是有問題的。

SO_REUSEADDR可以用在以下四種情況下。(摘自《Unix網絡編程》卷一,即UNPv1)

當有一個有相同本地地址和埠的socket1處於TIME_WAIT狀態時【4次握手】,而你啟動的程序的socket2要佔用該地址和埠,你的程序就要用到該選項。

一般來說,一個埠釋放後會等待兩分鐘之後才能再被使用,SO_REUSEADDR是讓埠釋放後立即就可以被再次使用。

SO_REUSEADDR用於對TCP套接字處於TIME_WAIT狀態下的socket,才可以重複綁定使用。server程序總是應該在調用bind()之前設置SO_REUSEADDR套接字選項。TCP,先調用close()的一方會進入TIME_WAIT狀態。

4次握手順序見下圖:

4次握手

SO_REUSEADDR允許同一port上啟動同一伺服器的多個實例(多個進程)。但每個實例綁定的IP位址是不能相同的。在有多塊網卡或用IP Alias技術的機器可以測試這種情況。

SO_REUSEADDR允許單個進程綁定相同的埠到多個socket上,但每個socket綁定的ip地址不同。這和2很相似,區別請看UNPv1。

SO_REUSEADDR允許啟動一個監聽伺服器並捆綁其眾所周知埠,即使以前建立的將此埠用做他們的本地埠的連接仍存在。這通常是重啟監聽伺服器時出現,若不設置此選項,則bind時將出錯。

SO_REUSEADDR允許在同一埠上啟動同一伺服器的多個實例,只要每個實例捆綁一個不同的本地IP位址即可。對於TCP,我們根本不可能啟動捆綁相同IP位址和相同埠號的多個伺服器。

SO_REUSEADDR允許單個進程捆綁同一埠到多個套接口上,只要每個捆綁指定不同的本地IP位址即可。這一般不用於TCP伺服器。

SO_REUSEADDR允許完全相同的地址和埠的重複綁定。但這只用於UDP的多播,不用於TCP。

SO_REUSEADDR允許完全重複的捆綁:當一個IP位址和埠綁定到某個套接口上時,還允許此IP位址和埠捆綁到另一個套接口上。一般來說,這個特性僅在支持多播的系統上才有,而且只對UDP套接口而言(TCP不支持多播)。

SO_REUSEPORT選項有如下語義:此選項允許完全重複捆綁,但僅在想捆綁相同IP位址和埠的套接口都指定了此套接口選項才行。

如果被捆綁的IP位址是一個多播地址,則SO_REUSEADDR和SO_REUSEPORT等效。

使用這兩個套接口選項的建議:在所有TCP伺服器中,在調用bind之前設置SO_REUSEADDR套接口選項;當編寫一個同一時刻在同一主機上可運行多次的多播應用程式時,設置SO_REUSEADDR選項,並將本組的多播地址作為本地IP位址捆綁。

設置方法如下:

  1. if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, 
  2.    (const void *)&nOptval , sizeof(int)) < 0)  
  3.    ... 

Q:編寫 TCP/SOCK_STREAM 服務程序時,SO_REUSEADDR到底什麼意思?

A:這個套接字選項通知內核,如果埠忙,但TCP狀態位於 TIME_WAIT ,可以重用埠。如果埠忙,而TCP狀態位於其他狀態,重用埠時依舊得到一個錯誤信息,指明"地址已經使用中"。如果你的服務程序停止後想立即重啟,而新套接字依舊使用同一埠,此時SO_REUSEADDR 選項非常有用。必須意識到,此時任何非期望數據到達,都可能導致服務程序反應混亂,不過這只是一種可能,事實上很不可能。

一個套接字由相關五元組構成,協議、本地地址、本地埠、遠程地址、遠程埠。SO_REUSEADDR 僅僅表示可以重用本地本地地址、本地埠,整個相關五元組還是唯一確定的。所以,重啟後的服務程序有可能收到非期望數據。必須慎重使用 SO_REUSEADDR 選項。

舉例

例子1:測試上面第一種情況。

  1. #include <netinet/in.h>  
  2. #include <sys/socket.h>  
  3. #include <time.h>  
  4. #include <stdio.h>  
  5. #include <string.h>  
  6. #define MAXLINE 100  
  7.  
  8. int main(int argc, char** argv)  
  9. {  
  10.    int listenfd,connfd;  
  11.    struct sockaddr_in servaddr;  
  12.    char buff[MAXLINE+1];  
  13.    time_t ticks;  
  14.    unsigned short port;  
  15.    int flag=1,len=sizeof(int);  
  16.  
  17.    port=10013;  
  18.  
  19.    if( (listenfd=socket(AF_INET,SOCK_STREAM,0)) == -1)  
  20.  
  21.    {  
  22.      perror("socket");  
  23.      exit(1);  
  24.    }  
  25.  
  26.    bzero(&servaddr,sizeof(servaddr));  
  27.    servaddr.sin_family=AF_INET;  
  28.    servaddr.sin_addr.s_addr=htonl(INADDR_ANY);  
  29.    servaddr.sin_port=htons(port);  
  30.  
  31.    if( setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &flag, len) == -1)  
  32.   {  
  33.       perror("setsockopt");  
  34.       exit(1);  
  35.    }  
  36.  
  37.    if( bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr)) == -1)  
  38.    {  
  39.       perror("bind");  
  40.       exit(1);  
  41.    }  
  42.    else  
  43.       printf("bind call OK!\n");  
  44.        
  45.    if( listen(listenfd,5) == -1)  
  46.    {  
  47.       perror("listen");  
  48.       exit(1);  
  49.    }  
  50.  
  51.    for(;;)  
  52.    {  
  53.       if( (connfd=accept(listenfd,(struct sockaddr*)NULL,NULL)) == -1) 
  54.       {  
  55.           perror("accept");  
  56.           exit(1);  
  57.       }  
  58.       if( fork() == 0)/*child process*/  
  59.       {  
  60.         close(listenfd);/*關閉監聽套接字,子進程不需要。*/  
  61.          
  62.         ticks=time(NULL);  
  63.         snprintf(buff,100,"%.24s\r\n",ctime(&ticks));  
  64.          
  65.         write(connfd,buff,strlen(buff));  
  66.         close(connfd);  
  67.          
  68.         sleep(1);  
  69.          
  70.         execlp("run",NULL);  
  71.         perror("execlp");  
  72.         exit(1);  
  73.      }  
  74.      close(connfd);  
  75.      exit(0);/* end parent*/  
  76.   }  
  77. }  

  1. gcc 123.c -o run 
  2. sudo cp run /sbin 
  3. sudo chmod 777 /sbin/run 

測試:編譯為run程序,放到一個自己PATH環境變量裡的某個路徑裡,例如$HOME/bin,運行run,然後telnet localhost 10013看結果。

第一步 運行程序,此時程序阻塞在accept()這個位置。

第二步 重新打開一個終端,執行以下命令。

第三步:可以看到次異步運行的程序退出,並列印了bind call OK! 說明子進程被執行,並且成功綁定了埠10013,驗證了第一種情況。

第二種情況我沒有環境測,所以就不給測試程序了,大家有條件的可以自己寫一個來測試一下。

測試第三種情況的程序 讀取本地ip地址

ifconfig

可以得到本地地址為:

  1. eth0 : 192.168.43.171 
  2. lo      : 127.0.0.1 

測試代碼

  1. #include <netinet/in.h>  
  2. #include <sys/socket.h>  
  3. #include <time.h>  
  4. #include <stdio.h>  
  5. #include <string.h>  
  6. #define MAXLINE 100  
  7.  
  8. int main(int argc, char** argv)  
  9. {  
  10.    int fd1,fd2;  
  11.    struct sockaddr_in servaddr1,servaddr2;  
  12.    char buff[MAXLINE+1];  
  13.    time_t ticks;  
  14.    unsigned short port;  
  15.    int flag=1,len=sizeof(int);  
  16.  
  17.    port=10013;  
  18.  
  19.    if( (fd1=socket(AF_INET,SOCK_STREAM,0)) == -1)  
  20.    {  
  21.        perror("socket");  
  22.        exit(1);  
  23.    }  
  24.  
  25.    if( (fd2=socket(AF_INET,SOCK_STREAM,0)) == -1)  
  26.    {  
  27.        perror("socket");  
  28.        exit(1);  
  29.    }  
  30.  
  31.    bzero(&servaddr1,sizeof(servaddr1));  
  32.    bzero(&servaddr2,sizeof(servaddr2));  
  33.    servaddr1.sin_family=AF_INET;  
  34.    servaddr2.sin_family=AF_INET;  
  35.  
  36.    if( inet_pton(AF_INET, "127.0.0.1", &servaddr1.sin_addr) <= 0)  
  37.  {  
  38.   printf("inet_pton() call error:127.0.0.1\n");  
  39.   exit(1);  
  40.  }  
  41.  
  42.  if( inet_pton(AF_INET, "192.168.43.171", &servaddr2.sin_addr) <= 0)  
  43.  {  
  44.   printf("inet_pton() call error:128.160.1.230\n");  
  45.   exit(1);  
  46.  }  
  47.  
  48.  servaddr1.sin_port=htons(port);  
  49.  servaddr2.sin_port=htons(port);  
  50.   
  51.  if( setsockopt(fd1, SOL_SOCKET, SO_REUSEADDR, &flag, len) == -1)  
  52.  {  
  53.   perror("setsockopt");  
  54.   exit(1);  
  55.  }  
  56.  
  57.  if( setsockopt(fd2, SOL_SOCKET, SO_REUSEADDR, &flag, len) == -1)  
  58.  {  
  59.   perror("setsockopt");  
  60.   exit(1);  
  61.  }  
  62.  
  63.  if( bind(fd1,(struct sockaddr*)&servaddr1,sizeof(servaddr1)) == -1) 
  64.  {  
  65.   perror("bind fd1");  
  66.   exit(1);  
  67.  }  
  68.  
  69.  if( bind(fd2,(struct sockaddr*)&servaddr2,sizeof(servaddr2)) == -1) 
  70.  {  
  71.   perror("bind fd2");  
  72.   exit(1);  
  73.  }  
  74.  
  75.  printf("bind fd1 and fd2 OK!\n");  
  76.   
  77.  /*put other process here*/  
  78.  getchar();  
  79.  exit(0);/* end */  
  80. }  

執行結果

結果

由於第四種情況只用於UDP的多播,和TCP的使用沒多大關係,所以就不寫測試例子了。自己有興趣的可以寫。

本文轉載自微信公眾號「一口Linux」,可以通過以下二維碼關注。轉載本文請聯繫一口Linux公眾號。

【編輯推薦】

【責任編輯:

武曉燕

TEL:(010)68476606】

點讚 0

相關焦點

  • Linux和Windows下如何快速查找電腦計算機埠被誰佔用
    一、簡單了解"埠""埠"可以認為是計算機與外界通信交流的出口。一個IP位址可以有65536(即256*256)個,埠是通過埠號來標記的,埠號只有整數,範圍是0~65 535(0~256*256-1)。
  • 快手一個手機號碼可以註冊幾個 可以綁定幾個號
    有很多老鐵對快手手機號註冊帳號和綁定帳號的事情不是很清楚,今天就在這裡仔細的跟大家說清楚快手一個手機號碼可以註冊幾個,可以綁定幾個號。
  • 詳解網絡編程的埠和套接字
    當網絡中的兩臺計算機進行通信時,除了確定計算機在網絡中的IP位址外,還需要確定計算機中的一個埠,埠並不是實際的物理設備,它是一個應用程式,這個應用程式來負責兩臺計算機的通信。一個IP位址標識了一臺主機(伺服器),主機可以提供多種服務,如web服務、ftp服務、遠程桌面等。主機的每個服務都會等待客戶端的連接,客戶端如何區別這些服務呢?這就需要埠來區分了。埠被規定為一個在0~65535之間的整數,這個整數和提供服務的應用程式關聯。
  • 健康寶綁定兩個手機號其中一個作廢無法核驗 破解方法來了
    「健康寶」綁定過的兩個手機號碼都需要驗證,由於其中一個號碼已作廢不再使用,導致無法進行核驗,「健康寶」無法正常使用。在此提醒大家,按照現行防疫要求,如果分別使用過微信端及支付寶端的北京「健康寶」小程序,並均授權綁定過手機號碼,則行程申報時,所有手機號均需完成行程信息申報與核驗,兩端的手機號將都會顯示在「個人中心」界面中。
  • 埠映射讓公網訪問內網SAP系統
    準備工作:內網SAP系統正常訪問有獨立外網IP的網絡支持埠映射的路由器
  • 王者榮耀一個身份證能綁定幾個號 王者榮耀實名認證介紹
    王者榮耀成年玩家身份證可以綁定的號較多,但也是有限制的,官方沒公布具體次數。如果玩家一個是微信號,一個是QQ號,這兩個使用同一個身份證是可以的。
  • 如果手機號註銷了,綁定了手機號的微信、支付寶,能正常使用嗎?
    如果手機號註銷了,綁定了手機號的微信、支付寶,能正常使用嗎?眾所周知,在網際網路經濟下,人們的生活確實變得越來越好,而且一些新事物的出現,也帶來了諸多的便利,比如說,微信、支付寶的全面普及,就讓我們能夠享受網購、外賣的方便,但大家都知道,由於現如今是實名制的時代,所以不管是微信,還是支付寶,都需要綁定手機號,進行實名認證,才能夠正常使用。
  • 夢幻西遊:綁定三傷害真實存在嗎?玩家藏寶閣秒號,進行驗證
    隨著時間的推移,藏寶閣上也出現了不少的套路,其中就有一個是關於靈飾的。普通靈飾都可以在藏寶閣上看到,但對於綁定靈飾來說,只能登上遊戲號才能驗證真假,根據這一情況,藏寶閣就有一些綁定三傷害、三法傷的號,問題來了,有真的嗎?針對這一情況,一位玩家決定秒一個號進行驗證。綁定靈飾靠譜嗎?不能說綁定靈飾都不靠譜,但就實際情況而言,十個裡面有九個都是坑!
  • Outlook客戶端郵箱怎麼綁定?
    郵件客戶端是指 foxmail 、outlook等工具軟體,可以把多個郵箱綁定到客戶端上收發郵件,無需每次都登錄,上次給大家講了foxmail如何綁定TOM vip郵箱,今天跟大家分享TOM vip郵箱如何綁定到outlook~ 1.
  • Android進程間通信
    數據傳遞的對象必須可序列化進程間通信傳遞的對象是有嚴格要求的,除了基本數據類型,其他對象要想可以傳遞,必須可序列化,Android實現可序列化一般是通過實現 Serializable 或者是 Parcelable如果你在進程通信中不需要傳非基本數據類型的對象,那麼你可以不了解序列化,但是可序列化是進程間通信的基礎,所以還是建議不了解的朋友先熟悉一下
  • 《使命召喚戰區》怎麼綁定手機號 手機號綁定方法教程
    導 讀   使命召喚戰區我們怎麼才可以綁定手機號呢?其實綁定手機號的方法也是很有趣的方式哦。
  • 史上最全網絡埠號大全,網絡工程師必備!
    埠:19服務:Character Generator說明:這是一種僅僅發送字符的服務。UDP版本將會在收到UDP包後回應含有垃圾字符的包。TCP連接時會發送含有垃圾字符的數據流直到連接關閉。HACKER利用IP欺騙可以發動DoS攻擊。偽造兩個chargen伺服器之間的UDP包。
  • eNSP工具如何使用雲設備,通過UDP埠實現上外網的通信
    文/IT科技愛好者大家好,今天來介紹一下,華為eNSP如何通過雲設備,使用UDP埠實現連接外網。(小編每一篇文章都會寫的非常的詳細,喜歡的朋友可以收藏和轉發哦!)添加雲設備和PC電腦3、「雲設備」配置添加「UDP埠」,在綁定信息中選擇「UDP」,然後點擊「添加」按鈕。
  • linux實戰案例-快速查找和刪除進程的方法
    #linux知識匯總與分享#1、查看全部運行進行常用的兩個命令(一)ps -ef|head -1結果說明:UID: 用戶ID用戶名PID:進程IDPPID:父進程id>C :當前進程佔用CPU的比例STIME:進程啟動時間TTY:進程運行的終端信息,無終端的為?
  • 無需公網IP以埠映射輕鬆實現外網遠程訪問FTP伺服器!
    FTP伺服器(File Transfer Protocol Server)是在網際網路上提供文件存儲和訪問服務的計算機,它們依照FTP協議提供服務,常被用作文件共享和傳輸,並可根據用戶實際需求設置訪問權限,同時還具備跨平臺的特性,是網際網路中應用十分廣泛的服務之一。
  • 怎樣查看自己的手機號,到底綁定了什麼?
    怎樣知道自己的手機號綁定了什麼?很多網站或app都需要我們註冊,才能使用它裡面的功能,這個時候,就有可能需要我們綁定手機號,久而久之,我們手機就會綁定非常多的網站。那麼,怎樣查看我們的手機到底綁定了哪些呢?
  • 一個棄用手機號會出賣所有隱私 註銷手機號請解除所有綁定
    「這個號碼被原主人棄用後,沒有解除和小米帳戶的綁定。」被棄用的號碼,經過一定的時間後,會被運營商重新出售,因此才會出現自己的號碼可以登錄別人帳戶的怪事。  同樣的道理,如果註銷手機號碼時,未解除支付寶、微信等的綁定,這個號碼到了新主人手上,也能登錄原主人的帳戶。  聽聽都覺得慌……你還敢任性嗎?
  • 10個接口,全千兆,兩個寬帶可同時使用
    所以我想升級公司的網絡設備,公司有兩個百兆寬帶,事實上我們可以充分利用這兩個寬帶,這已經足夠辦公室使用了。所以我們購買了一個支持雙寬帶覆蓋的路由器蒲公英X6。這個路由器很豪華,他有10個完整的千兆網絡埠,包括2個WAN埠和8個LAN埠,這樣,公司的兩個寬帶網絡就可以使用了。
  • 微信怎麼解除綁定的手機號
    微信是目前使用最廣的移動社交平臺,使用微信需要綁定手機號。為了保障微信帳號的安全及使用,目前同一手機號只能綁定一個微信號,綁定成功後可以更換但不支持解綁。想要解綁手機號,我們只能通過更換綁定新的手機號,從而解綁原來的手機號。下面就讓我們看看具體怎麼操作吧。
  • 無需公網IP,以埠映射輕鬆實現外網遠程訪問FTP伺服器!
    目前常見的解決方法是通過路由器埠映射並將動態IP綁定至域名上,通過該域名訪問內網FTP服務,這也就是大家熟知的DDNS動態域名解析。通過花生殼客戶端添加埠映射在花生殼「內網映射」界面添加新映射,這裡設置為「FTP共享」,應用類型選擇TCP協議(FTP伺服器默認支持協議),填寫內網主機IP及FTP伺服器默認埠號21,設置完成點擊保存,花生殼將自動生成一個外網訪問地址。