gpt4 book ai didi

c - 如何在 C 中给客户端特定的 ip 地址

转载 作者:太空狗 更新时间:2023-10-29 17:05:13 24 4
gpt4 key购买 nike

我正在尝试用 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);

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

我想改变它一些不同的东西。

最佳答案

如果您希望您的客户端使用特定的网络接口(interface)进行连接(例如,因为您有多个网卡),那么您首先需要调用 bind(2)connecting 之前在该接口(interface)的 IP 地址上。例如,如果您有两个 IP 地址分别为 192.168.1.100 和 10.101.151.100 的网络接口(interface),那么要使用 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));

关于c - 如何在 C 中给客户端特定的 ip 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15673846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com