Server Infos ermitteln

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Server Infos ermitteln

      Hei Leute,

      ich versuche gerade von meinem Lokalen Teeworlds-Server die Server-Infos per C# zu ermitteln, allerdings bekomme ich nach dem senden der Anfrage keine Daten vom Server. Hat da jemand einen Plan?

      Hier der Code:


      [cpp]
      IPHostEntry hostEntry = Dns.GetHostEntry(Dns.GetHostName()); //Lokale IP-Adressen ermitteln
      IPEndPoint ip = new IPEndPoint(hostEntry.AddressList[0], 8303); //IPV6 und Port

      Socket server = new Socket(ip.Address.AddressFamily, SocketType.Dgram, ProtocolType.Udp);

      Byte[] sendBytes = Encoding.ASCII.GetBytes("\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffgie3" + "\x00");
      server.SendTo(sendBytes, sendBytes.Length, SocketFlags.None, ip);

      IPEndPoint sender = new IPEndPoint(IPAddress.IPv6Any, 0);
      EndPoint Remote = (EndPoint)sender;

      byte[] data = new byte[1400];
      int receivedDataLength = server.ReceiveFrom(data, ref Remote);
      string returnData = Encoding.ASCII.GetString(data);

      server.Close();[/cpp]

      mfg Bobynator

    • Also, zwar habe ich noch nicht viel Erfahrungen mit Sockets, aber mir scheint es so, dass deine sendBytes falsch sind.

      Du musst auf jeden Fall folgende beiden If-Bedingungen einhalten:
      [cpp]
      if(Packet.m_DataSize == sizeof(SERVERBROWSE_GETINFO)+1 && mem_comp(Packet.m_pData, SERVERBROWSE_GETINFO, sizeof(SERVERBROWSE_GETINFO)) == 0)

      { SendServerInfo(&Packet.m_Address, ((unsigned char *)Packet.m_pData)[sizeof(SERVERBROWSE_GETINFO)]);}
      [/cpp]

      Also deine Datasize muss SERVERBROWSE_GETINFO+1==9 entsprechen und muss den Inhalt 255, 255, 255, 255, 'g', 'i', 'e', '3' haben.

      Deswegen scheinen mir bei "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xffgie3" + "\x00" zu viele '255' zu sein :)
      Versuch es mal mit der variante : "\xff\xff\xff\xffgie3\x00"


      Gruß Pata
    • Das Paket sollte eigentlich so stimmen.


      \xff\xff\xff\xff\xff\xff\xff\xff\xff\xffgie3" + "\x00"
      Byte 0-5 ist der "connless"-header des pakets. Die 9 weiteren Bytes sind der inhalt.


      C++ bsp.
      [cpp]

      // packet content
      static const unsigned char SERVERBROWSE_GETINFO[] = {255, 255, 255, 255, 'g', 'i', 'e', '3', '\0'};

      // fill header
      unsigned char buf[1024];
      buf[0] = 0xff;
      buf[1] = 0xff;
      buf[2] = 0xff;
      buf[3] = 0xff;
      buf[4] = 0xff;
      buf[5] = 0xff;

      std::memcpy(&buf[6], SERVERBROWSE_GETINFO, 9);


      // sento(...buf...);


      [/cpp]

      Bist du dir sicher, dass das senden und/oder empfangen so in .NET funktioniert?