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

690

    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ä.

    Luetuimmat keskustelut

    1. Nykynuoret puhuu nolosti englantia suomen sekaan, hävetkää!

      Kamalan kuuloista touhua. Oltiin ravintolassa ja viereen tuli 4 semmosta 20-25v lasta. Kaikki puhui samaan tyyliin. Nolo
      Maailman menoa
      206
      5004
    2. 57-vuotiads muka liian vanha töihin?

      On tämä sairas maailma. Mihin yli 55-vuotiaat sitten muka enää kelpaavat? Hidasta itsemurhaa tekemään, kun eläkkeelle ei
      Maailman menoa
      294
      3105
    3. 134
      1807
    4. Haluatteko miellyttää kumppaninne silmää?

      Entä muita aisteja? Mitä olette valmiita tekemään sen eteen että kumppani näkisi teissä kunnioitettavan yksilön? Olette
      Sinkut
      231
      1673
    5. Luovutetaanko nainen?

      En taida olla sinulle edes hyvän päivän tuttu. Nauratkin pilkallisesti jo selän takana.
      Ikävä
      67
      1451
    6. J-miehelle toivon

      Hyvää yötä. Voisiko nykyistä tilannetta uhmaten vielä pienintäkään toivetta olla, päästä kainaloosi joskus lepääämään.
      Ikävä
      85
      1233
    7. By the way, olet

      mielessäni. Olet minulle tärkeä, niin suunnattoman tärkeä. En kestäisi sitä jos sinulle tapahtuisi jotain. Surullani ei
      Ikävä
      76
      1183
    8. Miten olette lähestyneet kiinnostuksen kohdettanne?

      Keskusteluita seuranneena tilanne tuntuu usein olevan sellainen, että palstan anonyymit kaipaajat eivät ole koskaan suor
      Ikävä
      64
      1174
    9. Onko kaivattunne suosittu?

      Onko teillä paljon kilpailijoita? Mies valitettavasti näyttää olevan paljonkin naisten suosiossa :(
      Ikävä
      78
      1129
    10. Haluatko S

      vielä yrittää?
      Ikävä
      59
      1128
    Aihe