私のプログラムが起動されたコンピュータのIPアドレスを取得してクライアントに送信できるようにしたいのですが、実際のIPアドレス(たとえば127.0.0.1など)ではなく常に0.0.0.1を取得します。 。ソケットアドレスで独自のIPアドレスを取得するには?
現在、ポートは取得できますが、IPアドレスは取得できません。
どうすれば入手できますか?
最高の解決策は、sockaddr_in
で入手できるようにすることです。ここで私が現在やっているものです:
int open_connection(char* ip, int* port)
{
int sock;
struct sockaddr_in sin;
socklen_t len;
int i;
i = 0;
len = sizeof(sin);
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
return (-1);
bzero(&sin, sizeof(struct sockaddr_in));
sin.sin_family = AF_INET;
if (bind(sock, (struct sockaddr *) &sin, sizeof(sin)) != 0)
perror("Error on bind");
if (getsockname(sock, (struct sockaddr *)&sin, &len) != 0)
perror("Error on getsockname");
strcpy(ip, inet_ntoa(sin.sin_addr)); // IP = 0.0.0.0
*port = sin.sin_port;
return (sock);
}
EDIT:私は思考の私の方法で間違った方向に行っていた理解しています。だから私の質問です:自分のIPアドレスを取得する最良の方法は何ですか?
クライアントがあなたと話している場合、彼はすでにあなたのIPアドレスを持っています。私はなぜそれを明示的に送る必要があるのか混乱しています。 – Pyrce
@Pyrce私はFTPサーバーを作っています。パッシブモードに入ると、サーバーが聞いているIPアドレスとポートを送信する必要があります...同じIPアドレスであっても... –
多分この古い質問? http://stackoverflow.com/questions/212528/get-the-ip-address-of-the-machine私は0.0.0.0へのバインドは、すべてのIPアドレスでバインドを意味する特定のものだと思う - 私はあなたを疑う – Rup