C ++ Получение ошибки с операцией sendto сокета UDP при отправке структуры

Я возился с этот код пытаясь отправить другие вещи, кроме массива символов. Я создал struct Packet, но я получаю «аргумент типа» Packet ‘несовместим с параметром типа’ const char‘» ошибка.

Это происходит, когда я пытаюсь передать свой struct Packet в метод sendto. Я включил весь код клиента, чтобы вы могли лучше видеть, что происходит. Строка с ошибкой является единственной вещью с комментарием над ней, чтобы ее было легче найти. Это в цикле while, который мне, вероятно, больше не нужен, когда я думаю об этом, но это всего лишь тренировочный код.

#include<stdio.h>
#include<winsock2.h>
#include <sstream>
#include <string.h>

#pragma comment(lib,"ws2_32.lib") //Winsock Library

#define SERVER "127.0.0.1"  //ip address of udp server
#define BUFLEN 512  //Max length of buffer
#define PORT 8888   //The port on which to listen for incoming data

using namespace std;

struct Packet
{
int id;
int number;
};

int main(void)
{
struct sockaddr_in si_other;
int s, slen=sizeof(si_other);
char buf[BUFLEN];
WSADATA wsa;

printf("\nInitialising Winsock...");
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
printf("Failed. Error Code : %d",WSAGetLastError());
exit(EXIT_FAILURE);
}
printf("Initialised.\n");

if ( (s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == SOCKET_ERROR)
{
printf("socket() failed with error code : %d" , WSAGetLastError());
exit(EXIT_FAILURE);
}

memset((char *) &si_other, 0, sizeof(si_other));
si_other.sin_family = AF_INET;
si_other.sin_port = htons(PORT);
si_other.sin_addr.S_un.S_addr = inet_addr(SERVER);

while(1)
{
system("pause");

struct Packet *thing = new Packet();

thing->id= htonl(1000);
thing->number= htonl(7788);

//*************************************
//The error is with thing in the sendto statement.
if (sendto(s, thing, sizeof(*thing) , 0 , (struct sockaddr *) &si_other, slen) == SOCKET_ERROR)
{
printf("sendto() failed with error code : %d" , WSAGetLastError());
exit(EXIT_FAILURE);
}

memset(buf,'\0', BUFLEN);
if (recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slen) == SOCKET_ERROR)
{
printf("recvfrom() failed with error code : %d" , WSAGetLastError());
exit(EXIT_FAILURE);
}

puts(buf);
}

closesocket(s);
WSACleanup();

return 0;
}

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]