如何在C中为客户端提供特定的IP地址

Ale*_*lex 7 c sockets client-server ip-address

我试图在C中实现一个简单的客户端和服务器,我无法在网上找到如何为客户端设置特定IP地址的示例.这是我到目前为止所得到的:

sockfd = socket(PF_INET, SOCK_STREAM, 0);
if (sockfd == -1)
{
    <some code to handle error>
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr(<addressOfTheServer>);
address.sin_port = htons(<portToConnectToServer>);
len = sizeof(address);

int result = connect(sockfd, (struct sockaddr *)&address, len);
Run Code Online (Sandbox Code Playgroud)

在服务器端,我检查客户端IP地址,我总是得到127.0.0.1

我想改变一些不同的东西.

Ada*_*eld 21

如果您希望客户端使用特定的网络接口进行连接(例如,因为您有多个网卡),那么首先需要bind(2)在接口之前调用该接口的IP地址connect.例如,如果您有两个IP地址为192.168.1.100和10.101.151.100的网络接口,那么要使用192.168.1.100地址进行连接,您可以这样做:

// Error checking omitted for expository purposes
int sockfd = socket(AF_INET, SOCK_STREAM, 0);

// Bind to a specific network interface (and optionally a specific local port)
struct sockaddr_in localaddr;
localaddr.sin_family = AF_INET;
localaddr.sin_addr.s_addr = inet_addr("192.168.1.100");
localaddr.sin_port = 0;  // Any local port will do
bind(sockfd, (struct sockaddr *)&localaddr, sizeof(localaddr));

// Connect to the remote server
struct sockaddr_in remoteaddr;
remoteaddr.sin_family = AF_INET;
remoteaddr.sin_addr.s_addr = inet_addr(server_ip);
remoteaddr.sin_port = htons(server_port);
connect(sockfd, (struct sockaddr *)&remoteaddr, sizeof(remoteaddr));
Run Code Online (Sandbox Code Playgroud)