Java DatagramSocket ja SOCKS5 UDP-välitys
Ymmärrä, miksi Java UDP-soketti tarvitsee SOCKS5 UDP -toteutuksen, vaikka TCP-yhteydet käyttävät jo SOCKSiä.
Java HTTP-pyyntösi toimii SOKSin kautta, mutta UDP-ominaisuus lähettää liikennettä silti suoraan tai epäonnistuu. JVM:n SOCKS-ominaisuuksien asettaminen ei anna DatagramSocket-luokalle SOCKS5 UDP -toteutusta.
DatagramSocket-rajapinta lähettää ja vastaanottaa verkon päätepisteille osoitettuja datagrammeja. Sen metodi connect() valitsee kyseiselle soketille vastapuolen. Se ei suorita vastapuolen kanssa SOCKS-neuvottelua.
SOCKS5 UDP -reitti vaatii lisätyötä
SOCKS5 määrittelee UDP-liitoksen, joka muodostetaan TCP-ohjausyhteyden yli. Tämän jälkeen asiakas vaihtaa kapseloituja datagrammeja välityspalvelimen antaman välitysosoitteen kanssa. Jokainen kapseloitu viesti ilmoittaa kohteensa. Asiakastoteutuksen on hallittava tämä kehystys ja ohjausyhteyden elinkaari.
Tavallisen UDP-soketin osoittaminen välityspalvelimen TCP-kuunteluporttiin ohittaa nämä vaiheet. Sovelluksesi raakadatagrammien lähettäminen tuohon osoitteeseen ei korvaa liitosta.
Valitse kirjasto tai sovellusominaisuus, joka tukee nimenomaisesti SOCKS5 UDP -välitystä, ja varmista, että palvelinkin tukee sitä. Kirjasto, joka mainostaa SOCKS-tukea, saattaa toteuttaa vain TCP CONNECTin. Protokollamäärittely erottaa komennot toisistaan.
UDP-välitys tarvitsee myös käyttökelpoisen reitin
Onnistunut TCP-yhteys välityspalvelimeen muodostaa vain ohjausreitin. Palomuurit tai NAT-käyttäytyminen voivat silti häiritä välitykselle lähetettyjä datagrammeja. Kerää palautettu välityksen päätepiste ja mahdollinen välitysvirhe ennen kuin päättelet, että sovelluksen kohde on offline-tilassa.
Lopuksi SOCKS-kuljetustuki ei lisää UDP:lle toimitusvarmuuksia. Sovelluksesi omat aikakatkaisut, häviöiden käsittely ja viestikoon rajoitukset ovat edelleen voimassa reitin vaihduttua.