sdlnet beidseitiges check sockets
-
irgendwas komisches läuft mit sdl_net:
Wenn ich ich entweder beim sdl client oder server(tcp) über checksocket und socketready überprüfe ob das socket bereit ist, funktioniert das programm ganz gut, aber sobald beide die verbindung prüfen, gibt es kein freizeichen mehr, woran liegt das, dh wie kann ich das lösen#include <SDL.h> #include <SDL/SDL_net.h> #include <stdlib.h> #include <stdio.h> #ifdef _WIN32 #undef main #endif int main (void) { IPaddress address; TCPsocket sock_server; SDLNet_SocketSet set; if(SDL_Init (0) ==-1) { printf ("SDL_Init: %s\n", SDL_GetError ()); exit (1); } if(SDLNet_Init () ==-1) { printf ("SDLNet_Init: %s\n", SDLNet_GetError ()); exit(1); } if (SDLNet_ResolveHost (&address, "213.221.194.72", 10000) == -1) { printf ("SDLNet_ResolveHost: %s\n", SDLNet_GetError ()); SDLNet_Quit (); exit (1); } sock_server = SDLNet_TCP_Open (&address); if (!sock_server) { printf ("SDLNet_TCP_Open: %s\n", SDLNet_GetError ()); SDLNet_Quit (); exit (1); } set = SDLNet_AllocSocketSet (1); printf ("Init finished. Connected to server. Send Data after 5 Seconds...\n"); if (SDLNet_TCP_AddSocket (set, sock_server )!= 1) { printf ("SDLNet_TCP_AddSocket: %s\n", SDLNet_GetError ()); exit (1); } /*SDL_Delay (5000); */ char data[128]; while(true){ printf("%ics\n",SDLNet_CheckSockets (set, 0)); if(SDLNet_SocketReady(sock_server)){ SDLNet_TCP_Send (sock_server, "pong\n", 128); SDLNet_TCP_Recv (sock_server, &data, 128); printf("%s\n",data); } printf("lol\n"); } SDLNet_TCP_Close (sock_server); return 0; }#include <SDL.h> #include <SDL/SDL_net.h> #include <stdlib.h> SDL_Surface *screen; TCPsocket server; void init_sdl (void) { if (SDL_Init (SDL_INIT_VIDEO) < 0) exit (-1); atexit (SDL_Quit); } void init_net (void) { IPaddress addr; if (SDLNet_Init () < 0) { printf ("ERR Net: %s\n", SDLNet_GetError ()); exit (-1); } if (SDLNet_ResolveHost (&addr, NULL, 10000) < 0) { printf ("ERR ResolveHost: %s\n", SDLNet_GetError ()); SDLNet_Quit (); exit (-1); } server = SDLNet_TCP_Open (&addr); if (server == NULL) { printf ("ERR TCP_Open: %s\n", SDLNet_GetError ()); SDLNet_Quit (); exit (-1); } } #ifdef _WIN32 #undef main #endif int main (void) { TCPsocket client = NULL; SDL_Rect *rect; int maxread; init_sdl (); init_net (); SDLNet_SocketSet set; printf ("Server-Socket ist offen\n"); while (client == NULL) { /* eine Sekunde warten */ SDL_Delay (1000); client = SDLNet_TCP_Accept (server); } set = SDLNet_AllocSocketSet (1);if(!set){exit(0);} if(SDLNet_TCP_AddSocket (set, client)!=1){exit(0);}; printf ("Client wurde akzeptiert\n"); /* Schicke erstes Rechteck */ rect = (SDL_Rect *)malloc (sizeof (SDL_Rect)); rect->x = 10; rect->y = 20; rect->w = 100; rect->h = 200; char data[128]; while(true){ //char g[12]; //itoa(rand(),g,10); printf ("%i",SDLNet_CheckSockets(set,0)); //printf("lol"); char d[33]; sprintf(d,"ping%i\n",rand()); if (SDLNet_SocketReady (client)) { maxread = SDLNet_TCP_Recv (client, &data, 128); SDLNet_TCP_Send (client, d, 128); printf("%s\n",data); } printf("lol\n"); } printf ("I am Server. \n Read = %d\n", maxread); printf ("x = %d, y = %d, w = %d, h = %d\n", rect->x, rect->y, rect->w, rect->h); SDLNet_TCP_Close (client); SDLNet_TCP_Close (server); return 0; }