Odebranie danych przez port UDP

problemy z tworzeniem programów do obsługi sieci, internetu, e-mail itp..

Odebranie danych przez port UDP

Nowy postprzez Mateusz » piÄ…tek, 3 lipca 2009, 21:09

Witam,
Chcę napisać program który będzie pobierał informacje z gry przez port UDP. Przy próbie odebrania danych
Kod: Zaznacz cały
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
ServerSocket1->Active = false;
ServerSocket1->Port = 7000;
ServerSocket1->Active = true;

OutGaugePack pakiet;
ServerSocket1->Socket->ReceiveBuf(&pakiet,sizeof(pakiet));



}

wyskakuje błąd
Obrazek
Pod spodem daje informacje na temat połączenia i struktury pakietu który wysyła gra.
Kod: Zaznacz cały
// OutGauge - EXTERNAL DASHBOARD SUPPORT
// ========

// The user's car in multiplayer or the viewed car in single player or
// single player replay can output information to a dashboard system
// while viewed from an internal view.

// This can be controlled by 5 lines in the cfg.txt file :

// OutGauge Mode 0        :0-off 1-driving 2-driving+replay
// OutGauge Delay 1       :minimum delay between packets (100ths of a sec)
// OutGauge IP 0.0.0.0    :IP address to send the UDP packet
// OutGauge Port 0        :IP port
// OutGauge ID 0          :if not zero, adds an identifier to the packet

// Each update sends the following UDP packet :

struct OutGaugePack
{
   unsigned   Time;      // time in milliseconds (to check order)

   char   Car[4];         // Car name
   word   Flags;         // OG_FLAGS (see below)
   byte   Gear;         // Reverse:0, Neutral:1, First:2...
   byte   SpareB;
   float   Speed;         // M/S
   float   RPM;         // RPM
   float   Turbo;         // BAR
   float   EngTemp;      // C
   float   Fuel;         // 0 to 1
   float   OilPress;      // BAR
   float   Spare1;
   float   Spare2;
   float   Spare3;
   float   Throttle;      // 0 to 1
   float   Brake;         // 0 to 1
   float   Clutch;         // 0 to 1
   char   Display1[16];   // Usually Fuel
   char   Display2[16];   // Usually Settings

   int      ID;            // optional - only if OutGauge ID is specified
};

#define OG_SHIFTLIGHT   1
#define OG_FULLBEAM      2
#define OG_HANDBRAKE   4
#define OG_PITSPEED      8
#define OG_TC         16
#define OG_HEADLIGHTS   32
#define OG_SIGNAL_L      64
#define OG_SIGNAL_R      128
#define OG_REDLINE      256
#define OG_OILWARN      512
#define OG_1         1024
#define OG_2         2048
#define OG_3         4096
#define OG_4         8192
#define OG_KM         16384
#define OG_BAR         32768

//////
#endif
Avatar użytkownika
Mateusz
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): piątek, 3 lipca 2009, 19:24
Lokalizacja: Brzesko
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odebranie danych przez port UDP

Nowy postprzez Witold » sobota, 4 lipca 2009, 10:04

Mateusz napisał(a): wyskakuje błąd


Wydaje mi się że dane powinieneś odbierać w zdarzeniu OnClientRead.
Kod: Zaznacz cały
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
  OutGaugePack pakiet;
   Socket->ReceiveBuf(&pakiet,sizeof(pakiet));
}
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Odebranie danych przez port UDP

Nowy postprzez Mateusz » sobota, 4 lipca 2009, 22:46

Niestety dalej nie działa
Kod: Zaznacz cały
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
ServerSocket1->Active = false;
ServerSocket1->Port = 7000;
ServerSocket1->Active = true;

}
void __fastcall TForm1::ServerSocket1ClientRead(TObject *Sender,
      TCustomWinSocket *Socket)
{
OutGaugePack pakiet;
ServerSocket1->Socket->ReceiveBuf(&pakiet,sizeof(pakiet));
Label1->Caption = pakiet.RPM;
}
Program uruchamia się i nie wywala błędu ale nie wyświetla danych z gry.

Ustawienia w grze mam takie
Kod: Zaznacz cały
OutGauge Mode 2
OutGauge Delay 5
OutGauge IP 127.0.0.1
OutGauge Port 7000
OutGauge ID 2
Avatar użytkownika
Mateusz
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): piątek, 3 lipca 2009, 19:24
Lokalizacja: Brzesko
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: Odebranie danych przez port UDP

Nowy postprzez Witold » niedziela, 5 lipca 2009, 10:07

Mateusz napisał(a):Niestety dalej nie działa


Może dlatego że TServerSocket odsługuje TCP/IP. W BCB można znaleść TUdpSocket, a w Indy TIdUDPServer, może spróbuj z tymi.
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: Odebranie danych przez port UDP

Nowy postprzez Mateusz » niedziela, 5 lipca 2009, 20:53

Dzięki Witold za pomoc, skorzystałem z INDY 9 i działa.
Avatar użytkownika
Mateusz
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): piątek, 3 lipca 2009, 19:24
Lokalizacja: Brzesko
PodziÄ™kowaÅ‚ : 0
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje sieciowe

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 4 gości