Apuaa, kiitos! :)

Uuppi

Olen tekemässä ohjelmaa johon tarvitsen toimintoa jolla näen onko tietty peliserveri päällä.
esim:
serverin osoite: cold.game-host.org
ja portti: 3301 UDP

kun käytän TidUdpClient komponenttia, onnistun yhdistämään, mutta vaikka serveri on pois päältä, se onnistuu yhdistämään. Luulen että se yhdistää vain Game-host.org osoitteeseen.

Voisiko joku auttaa, tarviiko jonkun eri komponentin vai mitä?.

2

712

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • Delphiguru

      UDP on yhteydetön protokolla.

      Siksi UDP -soketin "yhdistäminen" on itseasiassa komponentin sisäinen asia, eikä se oikeasti yhdistä mitään mihinkään.

      En ole itse käyttänyt TidUdpClient komponenttia, vaan vastaavaa ICS -settiin kuuluvaa komponenttia, jonka voit imuroida täältä:

      http://www.overbyte.be/frame_index.html

      tai sitten voit soveltaa samoja periaatteita TidUdpClient komponenttiin.

      Huomaa kuitenkin näiden 2 eri komponentin periaatteellinen ero:

      TidUdpClient komponentti on luonteeltaan blokkaava, eli se vaatii tuekseen säikeitä (katso Delphin helpistä F1 tai Ctrl-F1 TThread).

      WSocket tai WSocketServer taas ovat EI-blokkaavia, eli ne voi pudottaa formille tai datamodule:lle ja ne sisäisesti hyödyntävät windows -viestejä ja ulkoisesti tarjoavat käyttöösi Delphi -eventtejä, eli eivät tarvitse säikeitä.

      Koska UDP on yhteydetön protokolla, järkevin tapa saada aikaan toimiva UDP:tä käyttävä sovellus on siksi:

      Luo UDP server -soketti. (tarvitset "palvelimen" juuri yhteydettömyyden takia, eli siinä vaiheessa kun peliserveri vastaa, niin ko. peliserveri on "asiakas" ja oma ohjelmasi "palvelin". Muussa tapauksessa liikenne jää 1-suuntaiseksi; omalta ohjelmaltasi peliserverille, mutta vastausta et voi saada muuten kuin määrittelemällä oma ohjelmasi UDP -palvelimeksi).

      Eli tuolla TWSocket:lla:

      WSocket1.Proto := 'udp';
      WSocket1.Listen; // aktivoi UDP -palvelinmoodin.

      Ja oman UDP -paketin saat lähtemään:

      WSocket1.Sendto();

      Ja kun saat OnDataAvailable -eventin, niin:

      WSocket1.ReceiveFrom();

      TWSocket :in oma .hlp -tiedosto kertoo lisää.

      Se ei välttämättä tule tuolta sivustolta imuroitavassa ICS.ZIP -paketissa, mutta se pitäisi löytyä erikseen googlettamalla; jos ei löydy, viestiä tänne, niin laitan sen imuroitavaksi johonkin palvelimelle.

      TidUdpClient komponentissa pitäisi päteä samat perusperiaatteet, mutta tällöin kannattaa luoda oma säikeluokka (TThread -pohjainen) ja laittaa koko UDP -liikenteen käsittely oman säieluokan Execute -metodiin.

      Ja TidUdpServer -komponentti vaikuttaisi paremmalta, sillä yhteydettömän protokollan tapauksessa oma ohjelmasi pitää tosiaankin olla UDP -palvelin, jotta se voisi myös vastaanottaa UDP -paketteja.

      Ainakin tuossa ICS -paketissa pitäisi olla jopa joku UDP Demo -projekti mukana.

      Huomaathan vielä palvelimen osalta määritellä ennen Listen -kutsua myös sen, mitä porttinumeroa haluat kuunnella. Ja oman UDP -paketin lähetys kannattaa tehdä samalla UDP Server -komponentilla, näin vastaus löytää oikeaan paikkaan.

      Ja vielä:

      Mikäli käytät ohjelmisto- / Laitteistopalomuuria, varmista, ettei palomuuri estä UDP -liikennettä ja tarvittaessa salli palomuureista haluamasi UDP -liikenne.

      Huomaa: jotkut halvimmat NAT -laitteistopalomuurit eivät välttämättä edes osaa käsitellä UDP -liikennettä oikein !

      Myös jotkut ADSL -modeemit saattavat sisältää integroidun NAT -laitepalomuurin !

      Jos oman PC:si IP -osoite alkaa jollain näistä:

      192.168.x.y

      10.x.y.z

      172.16.x.y - 172.31.x.y

      niin silloin tietokoneessasi on käytössä ns. sisäverkon IP -osoite, ja silloin UDP -liikenteen toiminta yleiseen internetiin ja -stä edellyttää, että NAT -palomuuri ensinnäkin on sellaista mallia joka osaa myös UDP -liikenteen osalta tehdä oikein NAT -muunnoksen ja toisekseen sen pitää olla konfiguroitu niin, ettei se estä haluamaasi UDP -liikennettä.

    • TIdUDPClient

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Takaisin ylös

    Luetuimmat keskustelut

    1. Kuuluuko ehkäisy parisuhteessa molemmille

      Mieheni pelkää kovasti sitä, että minun käyttämä ehkäisy (pillerit) pettävät ja että tulisin raskaaksi. Hänellä on jo en
      Parisuhde
      62
      1214
    2. Suhun ihastuminen oli liikaa mulle ...

      Se meni jo sairauden ja sekavuuden puolelle. Oisin tehnyt melkein mitä vain, että saisin sut ja se ei ole tervettä. Vars
      Ikävä
      34
      1020
    3. Mihin ihastuit ensimmäisenä

      kaivatussasi? 💯
      Ikävä
      63
      1010
    4. Tänään valtuustossa

      Striimi rikki. Mennään saliin ja otetaan pussillinen mätiä omenoita mukaan. Popcornit valmiiksi kun Savola alkaa puhumaa
      Ähtäri
      26
      1007
    5. Miten paljon odotat hänen

      Kohtaamisia tai näkemistä? Kuinka hyvä keskusteluyhteys teillä on?
      Ikävä
      69
      955
    6. Onko kaivattunne puhelias

      Vai hiljainen hissukka.
      Ikävä
      46
      941
    7. Jiille kysymys

      Oletko kuitenkin mennyt eteenpäin ja sinulla joku uusi nainen kuvioissa? 🥹
      Ikävä
      73
      892
    8. Suomussalmen mustalaiset

      Uutena suomussalmelaisena mietin, että millasta porukkaa ovat?
      Suomussalmi
      17
      870
    9. Oletko mielestäsi kaivattusi

      ihannetyyppi ulkoisesti?
      Ikävä
      56
      852
    10. Minkälaiset hiukset

      kaivatullasi on? Miehellä Kenties ananas, puolikalju jne jne Naisella kenties vaaleat kiharat jne jne
      Ikävä
      27
      836
    Aihe