Programozási aljzatok a Java-on
Azt akarod, hogy dolgozzon ki egy hálózati program Java - egy játék, a chat, vagy a kettő együtt ... megtalálta a megfelelő cikket - itt lehet látni az izgalmas világába aljzatok a Java. A cikk elolvasása után, akkor látjuk a fényt az alagút végén - nyilvánvalóvá válnak a célra foglalatok és hogyan lehet fejleszteni egy egyszerű program segítségével aljzatok programozási nyelv a Java.
Mi az a foglalat?
Ha összeadjuk a fenti egyenleteket, akkor:
_____ = egyedileg azonosítja a programot a hálózaton.
Ha magadat kitalálod - ez azt jelenti, hogy az erőfeszítéseim nem pazaroltak. Ha nem, akkor olvassa el újra vagy használja a Google-t, hogy megtalálja a legjobb cikket.
_____ - ez ... SOOKET!
Hogyan kell programozni a socketeket?
Elég az elméletről, menjünk le az akcióra. Kifejleszthetünk egy nagyon egyszerű és intuitív Java kódot, amely bemutatja az aljzatok használatát. Próbáljuk meg végrehajtani a következő műveletlistát:
1) Egy Java program megpróbál kapcsolatba lépni egy másik Java programmal (amely kétségbeesetten várja, hogy valaki kapcsolatba lépjen vele). Az első programot az Ügyfél hívja, a második pedig a szervert.
2) Miután sikeresen csatlakozott a kiszolgálóhoz, az ügyfél várja az adatok bevitelét, és elküldi a szöveget a kiszolgálónak.
3) A szerver program visszaküldi az ügyfél; t szövege (annak érdekében, hogy azt mutatják, hogy ez is egy ilyen jótékony hatása).
4) Megkapta a szöveget a kiszolgálóról, az ügyfél azt mutatja, hogy megmutatja a szerver véleményét Önről. Felkészült a munkára? Kezdjük. Csak azt tudomásul veszem, hogy nem fogom megtanítani, hogyan programozhat Java-ban a semmiből, de csak magyarázza meg a csomópontokra vonatkozó kódot. Hozzon létre 2 új Java programot, és nevezze el őket Server.java és Client.java. Adtam a kódot alább, csak ne félj, elmagyarázom mindent.
import java.net. *;
import java.io. *;
nyilvános osztály Szerver nyilvános statikus void main (String [] ar) int port = 6666; // véletlenszerű port (bármilyen szám lehet 1025-től 65535-ig)
próbáld ki a ServerSocket-t ss = új ServerSocket (port); // hozzon létre egy kiszolgálófoglalatot, és kösse össze a fenti porttal
System.out.println ("Várakozás egy ügyfélre");
Socket socket = ss.accept (); // okozza a kiszolgálónak a kapcsolatok várakozását és az üzenet megjelenítését, amikor valaki kapcsolatba lépett a kiszolgálóval
System.out.println ("Megkaptam egy klienst :) Végül valaki meglátott az egész fedélen!");
System.out.println ();
// Fogadja az aljzat bemeneti és kimeneti áramát, most már adatokat fogadhatunk és küldhetünk el az ügyfélnek.
InputStream sin = socket.getInputStream ();
OutputStream sout = socket.getOutputStream ();
// Átalakít egy másik típust, így könnyebb feldolgozni a szöveges üzeneteket.
DataInputStream in = új DataInputStream (bűn);
DataOutputStream out = új DataOutputStream (sout);
String line = null;
míg a (true) line = in.readUTF (); // várjon, amíg az ügyfél egy szövegsorot küld.
System.out.println ("A buta ügyfél most küldött nekem ezt a sort." + Line);
System.out.println ("visszaadom");
out.writeUTF (sor); // küldje vissza az ügyfélnek ugyanazt a szövegsorozatot.
out.flush (); // a szál befejezni az adatátvitelt.
System.out.println ("Várakozás a következő sorra");
System.out.println ();
>
> fogás (x kivétel)
>
>
import java.net. *;
import java.io. *;
// Fogadja az aljzat bemeneti és kimeneti áramát, most már adatokat fogadhatunk és küldhetünk el az ügyfél által.
InputStream sin = socket.getInputStream ();
OutputStream sout = socket.getOutputStream ();
// Átalakít egy másik típust, így könnyebb feldolgozni a szöveges üzeneteket.
DataInputStream in = új DataInputStream (bűn);
DataOutputStream out = új DataOutputStream (sout);
// Hozzon létre egy szálat a billentyűzetről történő olvasáshoz.
BufferedReader billentyűzet = új BufferedReader (új InputStreamReader (System.in));
String line = null;
System.out.println ("Írjon be valamit, és nyomja meg az Enter billentyűt." Elküldi a szervernek és elmondja neked, hogy mit gondol. ");
System.out.println ();
míg a (true) line = keyboard.readLine (); // várjon, amíg a felhasználó beír valamit és nyomja meg az Enter gombot.
System.out.println ("Ez a sor küldése a kiszolgálóhoz.");
out.writeUTF (sor); Küldje el a beírt szöveget a kiszolgálónak.
out.flush (); // a szál befejezni az adatátvitelt.
line = in.readUTF (); // várjon, amíg a szerver egy szövegsorot küld.
System.out.println ("A szerver nagyon udvarias volt, küldött nekem ezt." + Line);
System.out.println ("Úgy néz ki, mintha a kiszolgáló örülne nekünk." Lépj tovább, és írj további sorokat. ");
System.out.println ();
>
> fogás (x. kivétel) x.printStackTrace ();
>
>
>
Most összeállítjuk a kódot:
javac Server.java Client.java
Nyissa meg a két parancsablakot (DOS). Egy ablakban bemutatjuk:
Szükség szerint ebben a sorrendben.
Most írja be a szövegsorot az ablakban, ahol az ügyfél fut, és nyomja meg az Enter gombot. Nézz két ablakot és nézd meg, mi történik. Végül nyomja meg a Ctrl-C billentyűkombinációt a programok leállításához.
Az aljzatok munkakódjának magyarázata
Vegye figyelembe a kiszolgáló kód következő részét:
ServerSocket ss = új ServerSocket (port);
Socket socket = ss.accept ();
A ServerSocket osztály kissé eltér a Socket osztálytól. A socket osztály az aljzat. A fő különbség a ServerSocket között az, hogy a program várhatja a kapcsolatokat az ügyfelektől. A létrehozásakor meg kell adnia azt a portot, amelyen együttműködik, és hívja az accept () metódust. Ez a módszer azt eredményezi, hogy a program a megadott porton vár a kapcsolatokra. A program végrehajtása erre a helyre függ, amíg az ügyfél csatlakozik. Az ügyfél sikeres összekapcsolása után létrehoz egy normál Socket objektumot, amelyet az összes meglévő művelet elvégezhet a foglalattal. Vegye figyelembe azt is, hogy ez a Socket objektum megjeleníti a kapcsolat másik végét. Ha adatokat kíván küldeni az ügyfélnek, akkor nem használhatja a saját aljzatát.
InetAddress ipAddress = InetAddress.getByName (cím);
Az InetAddress létrehozása után létrehozhatunk egy socketet:
Socket socket = új aljzat (ipAddress, serverPort);
InputStream sin = socket.getInputStream ();
OutputStream sout = socket.getOutputStream ();
Az alábbi sorok egyszerűen átalakítják a streameket más stream típusokra. Ezután könnyebb lesz számunkra a String objektumokkal dolgozni. Ez a kód nem tesz semmit a hálózattal.
DataInputStream in = új DataInputStream (bűn);
DataOutputStream out = új DataOutputStream (sout);
A többi nagyon egyszerű - egyszerű manipulációk szálelemekkel (nincs aljzat). Használhatja a kedvenc szálakat, hívhatja kedvenc módszereit, és győződjön meg róla, hogy adatokat továbbít a második végére. Ha nem ismeri a szálak használatát, azt javaslom, hogy találjon róluk egy cikket, és olvassa el.