簡體   English   中英

如何在 C/C++ 中的套接字編程中綁定地址?

[英]How to bind address in socket programming in c/c++?

我想將地址“95.96.10.1”與端口號 8080 綁定。但是當我嘗試下面的代碼時,它給了我錯誤“地址已在使用中”。

#include <unistd.h> 
#include <stdio.h> 
#include <sys/socket.h> 
#include <stdlib.h> 
#include <netinet/in.h> 
#include <string.h> 
#define PORT 8080 
int main(int argc, char const *argv[]) 
{ 
int server_fd, new_socket, valread; 
struct sockaddr_in address; 
int opt = 1; 
int addrlen = sizeof(address); 
char buffer[1024] = {0}; 
char *hello = "Hello from server"; 

// Creating socket file descriptor 
if ((server_fd = socket(AF_INET, SOCK_STREAM, 0)) == 0) 
{ 
    perror("socket failed"); 
    exit(EXIT_FAILURE); 
} 


if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, 
                                              &opt, sizeof(opt))) 
{ 
    perror("setsockopt"); 
    exit(EXIT_FAILURE); 
} 
address.sin_family = AF_INET; 
address.sin_addr.s_addr = INADDR_ANY; 
address.sin_port = htons( PORT ); 

// Forcefully attaching socket to the port 8080 
if (bind(server_fd, (struct sockaddr *)&address,  
                             sizeof(address))<0) 
{ 
    perror("bind failed"); 
    exit(EXIT_FAILURE); 
} 

請告訴我如何將地址與端口綁定?

目前,您正在綁定到INADDR_ANY ,這意味着綁定到所有接口:

address.sin_addr.s_addr = INADDR_ANY; 

如果要綁定到特定地址,則需要進行設置。 您可以使用 inet_addr inet_addr將 IPv4 字符串轉換為地址值:

address.sin_addr.s_addr = inet_addr("95.96.10.1"); 

此外,套接字選項不能一起 OR'ed。 您一次只能操作一個。

if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) 
{ 
    perror("setsockopt"); 
    exit(EXIT_FAILURE); 
} 
if (setsockopt(server_fd, SOL_SOCKET, SO_REUSEPORT, &opt, sizeof(opt))) 
{ 
    perror("setsockopt"); 
    exit(EXIT_FAILURE); 
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM