Я создал соединение через сокет tcp между двумя ПК, и теперь я хочу, чтобы клиент мог выбирать ip и порт из командной строки (./client ip port), но у меня возникли некоторые проблемы с приведением аргумента argv порта для фактического типа порта (uint16_t). Вот код функции, которая устанавливает соединение: извините за итальянское именование переменных; я пометил '-' строками, которые дают мне ошибку
int connettiAlServer(char **argv, char *indirizzoServer) {
int socketDesc;
- uint16_t porta = (uint16_t)argv[2];
indirizzoServer = ipResolver(argv);
struct sockaddr_in mio_indirizzo;
mio_indirizzo.sin_family = AF_INET;
- mio_indirizzo.sin_port = htons(porta);
inet_aton(indirizzoServer, &mio_indirizzo.sin_addr);
if ((socketDesc = socket(PF_INET, SOCK_STREAM, 0)) < 0)
perror("Impossibile creare socket"), exit(-1);
else
printf("Socket creato\n");
if (connect(socketDesc, (struct sockaddr *)&mio_indirizzo,
sizeof(mio_indirizzo)) < 0)
perror("Impossibile connettersi"), exit(-1);
else
printf("Connesso a %s\n", indirizzoServer);
return socketDesc;
}
Ошибка заключается в следующем в первой отмеченной строке:
warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
45 | uint16_t porta = (uint16_t)argv[2];