Я новичок в C ++ и портирую код C (TWAMP RFC5357) на новый проект (IPSLA RFC 6812), и я столкнулся с этой проблемой:
Когда я пытаюсь использовать функцию Отправить, Я вижу ошибку «ошибка C2664: ‘send’: невозможно преобразовать параметр 2 из ‘ServerGreeting’ в ‘const char *'» «Нет доступного оператора преобразования, определенного пользователем, который может выполнить это преобразование, или оператор не может быть вызван».
Итак, я искал об этом, и я нашел некоторые ответы, которые я не понял.
Вот немного кода:
typedef struct server_greeting
{
UINT8 Не используется [12];
UINT32 Режимы;
UINT8 Challenge [16];
UINT8 Соль [16];
UINT32 Count;
UINT8 MBZ [12];
} ServerGreeting;
struct active_session {
int socket;
// RequestSession req;
};
struct client_info {
int socket;
sockaddr_in addr;
int sess_no;
struct active_session sessions[MAX_SESSIONS_PER_CLIENT];
timeval shutdown_time;
};
static void cleanup_client (struct client_info *client)
{
fprintf (stderr,"Cleanup client %s\n", inet_ntoa(client->addr.sin_addr));
FD_CLR(client->socket,&read_fds);
closesocket(client->socket);
used_sockets--;
int i;
for (i = 0; i < client->sess_no; i++)
/* If socket is -1 the session has already been closed */
if (client->sessions[i].socket > 0) {
FD_CLR(client->sessions[i].socket, &read_fds);
closesocket(client->sessions[i].socket);
client->sessions[i].socket = -1;
used_sockets--;
}
memset(client, 0, sizeof(struct client_info));
//client->status = kOffline;
}static int send_greeting(UINT8 mode_mask, struct client_info *client)
{
int socket = client->socket;
int i;
ServerGreeting greet;
memset(&greet, 0, sizeof(greet));
greet.Modes = 1 & mode_mask;
for (i = 0; i < 16; i++)
greet.Challenge[i] = rand() % 16;
for (i = 0; i < 16; i++)
greet.Salt[i] = rand() % 16;
greet.Count = (1 << 12);
int rv = send (socket, greet, sizeof(greet), 0);
if (rv < 0) {
fprintf(stderr, "[%s] ", inet_ntoa(client->addr.sin_addr));
perror("Failed to send ServerGreeting message");
cleanup_client(client);
} else {
printf("Sent ServerGreeting message to %s. Result %d\n",
inet_ntoa(client->addr.sin_addr), rv);
}
return rv;
}
Не могли бы вы помочь мне с этим? Спасибо
send
функция принимает в качестве второго параметра const char*
указатель на буфер, так что вам нужно будет передать адрес вашего struct
с соответствующим составом,
int rv = send (socket, (const char*)&greet, sizeof(greet), 0);
Компилятор говорит вам, что он не может выполнить преобразование из структуры, которую вы пытаетесь передать, в ожидаемый тип указателя, вы должны в это поверить.