Linux
如何判斷 TCP 埠是否打開?
我正在嘗試在 C 中實現套接字程式。當我嘗試從客戶端連接到伺服器(Ubuntu)時,它會顯示類似“連接失敗”的錯誤。
所以我認為問題出在埠上。我正在使用 5454/tcp 埠進行套接字程式。
我怎麼知道 5454 埠是否在監聽?如果不是,那麼我可以使用哪些埠在 Ubuntu 中使用 C 進行 TCP 套接字程式?這只是埠的問題,還是我的程式碼有什麼問題,或者在 LINUX Ubuntu 中需要任何設置?
編輯: 程式碼片段:
int socket_send; struct sockaddr_in address; printf("\n Initialization Socket...."); socket_send = socket(AF_INET,SOCK_STREAM,0); if(socket_send == -1) { perror("\n Socket not created.Error:"); return 1; } printf("\n Socket created"); address.sin_family=AF_INET; address.sin_addr.s_addr=inet_addr(ip); address.sin_port=htons(5454); if(connect(socket_send,(struct sockaddr*)&address,sizeof(struct sockaddr))<0) { perror("\nConnetion failed.Error:"); return 1; } printf("\n Connected"); if(send(socket_send,(char*)buffer,size,flag)<0) { perror("\nSending failed.Error:"); return 1; } printf("\n Data successfully sent"); close(socket_send);
編輯:問題出在埠上,所以我剛剛重新安裝了 Ubuntu,它正在工作。謝謝大家。
由於您正在使用 CI 進行程式,因此想發布一個小片段來顯示埠是否打開,因此我已經編寫了輸出字元串的程序。您可以輕鬆更改它以滿足您的需要。
回答你的第二個問題,就像這裡的每個人都說的那樣,如果你是系統上的超級使用者(root),如果埠未被任何其他應用程序使用,你幾乎可以使用任何埠。如果您不是root,則可以打開1024以上的任何埠。
#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> int main(int argc, char *argv[]) { int portno = 5454; char *hostname = "192.168.56.101"; int sockfd; struct sockaddr_in serv_addr; struct hostent *server; sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd < 0) { error("ERROR opening socket"); } server = gethostbyname(hostname); if (server == NULL) { fprintf(stderr,"ERROR, no such host\n"); exit(0); } bzero((char *) &serv_addr, sizeof(serv_addr)); serv_addr.sin_family = AF_INET; bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length); serv_addr.sin_port = htons(portno); if (connect(sockfd,(struct sockaddr *) &serv_addr,sizeof(serv_addr)) < 0) { printf("Port is closed"); } else { printf("Port is active"); } close(sockfd); return 0; }