Ich bin neu in der Netzwerkprogrammierung. Ich habe ein bisschen mit TCP-Sockets gemacht, und ich versuche es mit einem einfachen UDP-Client (s)/Server.SDL_net UDP Paketdaten
Ich bin mit dem SDL_net Rahmen für dieses Projekt.
Das Problem, das ich in renne ist der UDPpacket struct Uint8 *
als Datentyp für die Daten verwendet. Ich möchte jedoch nur einen direkten Text senden können. Ich habe ein wenig über Casting gelesen, aber nichts scheint kompatibel zu sein, und ich habe Mühe, die richtige Lösung dafür zu finden.
Der Code für den Client wird unten angezeigt. Der Fehler ist, wie Sie annehmen würden, wenn ich versuche, p-Daten (am Ende des Codes) zu setzen.
Ratschläge oder Korrekturen, die Sie würde haben sehr zu schätzen!
#include <iostream>
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2_net/SDL_net.h>
using namespace std;
int main(int argc, const char * argv[]) {
UDPsocket sd;
//create the socket
if(!(sd = SDLNet_UDP_Open(0))) {
printf("Could not create socket\n");
SDLNet_Quit();
SDL_Quit();
exit(1);
}
//get my address
IPaddress* myaddress = SDLNet_UDP_GetPeerAddress(sd, -1);
if(!myaddress) {
printf("Could not get own port\n");
exit(2);
}
cout << "My Port: " << myaddress->port << endl;
/******************************
* These are used to recieve
*******************************/
UDPpacket * rcvP = SDLNet_AllocPacket(1024);
if(!rcvP) {
printf("Could not allocate receiving packet\n");
exit(3);
}
UDPsocket rcvS;
rcvS = SDLNet_UDP_Open(myaddress->port);
if(!rcvS)
{
printf("Could not allocate receiving socket\n");
exit(4);
}
//resolve the address of the server
IPaddress srvHost;
IPaddress * ip = & srvHost;
SDLNet_ResolveHost(ip, "localhost", 8888);
//set up the packet
UDPpacket * p = SDLNet_AllocPacket(1024);
if(!p) {
printf("Could not allocate packet\n");
SDLNet_Quit();
SDL_Quit();
exit(2);
}
//link the server address to our packet
p->address.host = srvHost.host;
p->address.port = srvHost.port;
//main loop
while(true){
SDL_Event e;
while(SDL_PollEvent(&e))
{
if(e.type == SDL_KEYDOWN)
{
char * data;
switch(e.key.keysym.sym)
{
case SDLK_LEFT:
p->data = "left";
p->len = strlen("left") + 1;
SDLNet_UDP_Send(sd, -1, p);
break;
case SDLK_RIGHT:
p->data = "right";
p->len = strlen("right") + 1;
SDLNet_UDP_Send(sd, -1, p);
break;
default:
break;
}
}
}
}
return 0;
}
Danke @Christopher, das hat es gelöst! Ich habe nicht bemerkt, dass der Puffer bereits zugeteilt war .... obwohl AllocPacket mich auf diesem * Face-Palm * Client/Server eingeweiht haben sollte, arbeiten jetzt – pocket86