可以使用2个不同的静态IP(IPv4)中的任何一个来访问我的网站。

是否可以打开与另一台服务器的TCP连接,并指定将2个IP中的哪个用作返回地址?

x.x.x.x(我的服务器)=> z.z.z.z(目标服务器)
y.y.y.y(我的服务器)=> z.z.z.z(目标服务器)

为了简单起见,在此示例中省略了错误检查等:

struct addrinfo hints, *result;
hints.ai_flags = 0;
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_addrlen = 0;
hints.ai_canonname = NULL;
hints.ai_addr = NULL;
hints.ai_next = NULL;

getaddrinfo(domain, "80", &hints, &result);

socket(result->ai_family, result->ai_socktype, result->ai_protocol);

最佳答案

就像@hochl所说的那样,您使用bind系统调用:

struct sockaddr_in sin = { 0 };
int sock;

/* Create a socket address, with a specific port and (local) ipnumber */
sin.sin_family = AF_INET;
sin.sin_port = htons(80);
inet_aton("1.2.3.4", &sin.sin_addr);

/* Create socket */
sock = socket(AF_INET, SOCK_STREAM, 0);

/* Bind socket to the local address */
bind(sock, (struct sockaddr *) &sin, sizeof(sin));

/* Now connect to remote server... */
/* connect(...) */

应该注意的是,通常不建议使用inet_aton,而建议使用inet_pton

关于c - C打开特定IP上的套接字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7901945/

10-13 05:30