Øystein T. Skrevet 15. februar 2007 Del Skrevet 15. februar 2007 (endret) Hei, eg har søkt litt i forumet og lest litt om kva som står her. Har likevel ikkje funne svar på mitt konkrete problem. Er relativt fersk med Java, men kan noko C++ og PHP. Jobber litt for å lære no, og problemstillingen er å lage eit enkelt snakkeprogram. Bruker UDP og DatagramSocket for å setje opp server (har nettop lest at dette kanskje er unødvendig, men det er ikkje så farleg no). So har eg ein klient som har tre klassar; ein hovudklasse, ein senderklasse og ein mottakerklasse. Senderklassen og mottakerklassen er trådbaserte, for eg tenker dei må køyre samtidig for å kunne motta og sende uten noko problem. Problemet mitt er korleis eg skal får desse to klassane til å køyre samstundes? Så i bunn og grunn er det forståelse for tråder som setter ein stopper for dette, for om eg køyrer sendeklassen i eit kommandovindauge, og mottakerklassen i eit kommandovindauge, så fungerer det fint. Har prøvd litt forskjellig, som: public klass Program { ... public static void main( String [] args ) { Motta mottaker = new Motta(); Send sender = new Send(); mottaker.start(); sender.start(); // Her vil den berre køyre mottaker, og omvendt om eg startet sender fyrst. // eller... Motta mottaker = new Motta(); mottaker.start(); // Og her har eg satt Send sender = new Send(); sender.start(); inni // Motta klassen, som vist i koden under. Dette fungerer dog heller ikkje. } } Det er litt klipp ut/lim inn og litt skriving. Trykk for å sjå kode: Klikk for å se/fjerne innholdet nedenfor import java.io.*; import java.net.*; public class Program { public static void main(String[] args) { Motta mottaker = new Motta(); mottaker.start(); } } class Motta extends Thread { private static InetAddress adressa; private static DatagramSocket dgram; protected Send sender = new Send(); public void run() { try { dgram = new DatagramSocket(); try { adressa = InetAddress.getByName("230.0.0.1");; } catch(UnknownHostException e) { System.out.println("Host ID not found!"); System.exit(1); } dgram.connect( adressa, 4445 ); DatagramPacket pakke; sender.start(); // get a few quotes for (int i = 0; i < 5; i++) { this.interrupt(); byte[] buffer = new byte[256]; pakke = new DatagramPacket(buffer, buffer.length); dgram.receive(pakke); String mottatt = new String(pakke.getData()); System.out.println("Server> " + mottatt); } } catch(IOException e) { e.printStackTrace(); } finally { System.out.println("\n* Closing connection... *"); dgram.close(); //Step 8. } } class Send extends Thread { private InetAddress host; private final int PORT = 4445; private DatagramSocket dgramSocket; private DatagramPacket inPacket, outPacket; private byte[] buffer; public void main(String[] args) { run(); } public void run() { try { try { host = InetAddress.getByName("230.0.0.1");; } catch(UnknownHostException e) { System.out.println("Host ID not found!"); System.exit(1); } dgramSocket = new DatagramSocket(); //Step 1. //Set up str eam for keyboard entry... BufferedReader userEntry = new BufferedReader(new InputStreamReader(System.in)); String message="", response=""; do { System.out.print("Enter message: "); message = userEntry.readLine(); if (!message.equals("***CLOSE***")) { outPacket = new DatagramPacket( message.getBytes(),message.length(),host,PORT); //Step 2. dgramSocket.send(outPacket); //Step 3. //buffer = new byte[256]; //Step 4. //inPacket = new DatagramPacket(buffer, buffer.length); //Step 5. //dgramSocket.receive(inPacket); //Step 6. //response = new String(inPacket.getData(),0, inPacket.getLength()); //Step 7. //System.out.println("\nSERVER> " + response); } }while (!message.equals("***CLOSE***")); } catch(IOException e) { e.printStackTrace(); } finally { System.out.println("\n* Closing connection... *"); dgramSocket.close(); //Step 8. } } } } Endret 17. februar 2007 av rec0n Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå