Gå til innhold

[LØYST] To trådklasser som skal køyre samstundes


Anbefalte innlegg

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 av rec0n
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...