現在、次のプログラムはIPv4アドレスを使用してのみ接続します。 サーバーのIPv6アドレスまたはIPv4アドレスのいずれかを使用してサーバー(IPv4とIPv6クライアントを受け入れることの互換性)に接続するように変更します。クライアントプログラムをIPv4またはIPv6経由で接続したい
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include "common.h"
#include "client.h"
int
CreateClientTCP(const char *svrHost,
unsigned short svrPort,
char *svrName,
int svrNameLen)
{
int sock;
struct sockaddr_in svrAddr;
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("Failed to allocate the client socket");
exit(EXIT_FAILURE);
}
memset(&svrAddr, 0, sizeof(svrAddr));
svrAddr.sin_family = AF_INET;
svrAddr.sin_port = htons(svrPort);
if (inet_pton(AF_INET, svrHost, &svrAddr.sin_addr.s_addr) <= 0) {
perror("Failed to convert IP address\n");
exit(EXIT_FAILURE);
}
SocketAddrToString(&svrAddr, svrName, svrNameLen);
Log("Attempting %s\n", svrName);
if (connect(sock, (struct sockaddr *)&svrAddr, sizeof(svrAddr)) < 0) {
perror("Failed to connect to the server");
exit(EXIT_FAILURE);
}
return sock;
}
int
main(int argc, char *argv[])
{
int sock;
ClientArgs cliArgs;
char svrName[INET_ADDRSTRLEN + PORT_STRLEN];
ParseArgs(argc, argv, &cliArgs);
sock = CreateClientTCP(cliArgs.svrHost, cliArgs.svrPort,
svrName, sizeof svrName);
Log("Connected to server at %s\n", svrName);
Client(sock, &cliArgs);
close(sock);
Log("\nDisconnected from server at %s\n", svrName);
return 0;
}
プログラム内で必要となる変更は何ですか? 別のクライアントをコーディングする必要がありますか? – ramnarayanan
@ramnarayananいいえ、両方のバージョンをサポートするために1つのクライアントを使用することを目的としています。 – fluter
私は共有したいエラーの流れがあります。 @fluter – ramnarayanan