作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试用 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)
在 connect
ing 之前在该接口(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/
我是一名优秀的程序员,十分优秀!