webForumDet fria alternativet

Datagramsocket(receive)

1 svar · 563 visningar · startad av nigge

niggeMedlem sedan feb. 2002199 inlägg
#1

Tjena! Jag håller på med ett litet program som ska föra över meddelanden mellan två instanser(meningen är att det ska gå att skicka mellan två datorer men än så länge köra jag mellan två portar på localhost)
Skickandet TROR jag går bra(svårt att veta) men däremot mottagandet får jag inte till. koden som skall ta emot är den här

public void taEmot() throws SocketException, IOException{
System.out.println("taEmotmetoden körs");
socket = new DatagramSocket(minPort);
byte[] data = new byte[256];
while (true){
DatagramPacket packet = new DatagramPacket(data, data.length);
socket.receive(packet);
System.out.println("taEmotmetoden körs");

        }
    }

Där variabeln minPort är en int som är deklarerad på annan plats(tar emot argument för vilken port som ska lyssnas på t.ex 2000 för att skicka och 2001 för att ta emot.
Problemet jag har är att när ta emot-metoden körs så låser sig programmet, det verkar som att den "kräver" att ett meddelande ska komma. jag vill att den ska ligga och lyssna på porten och agera NÄR något meddelande kommer, inte låsa programmet i väntan på att något kommer...
Någon som har förslag? eller vet vad jag gör fel?!
Mvh
/Niklas

tydalMedlem sedan juni 20034 013 inlägg
#2

Jag har inte programmerat sockets i just java, men generellt så kan du antingen lägga ta-emot-koden i en egen tråd eller så gör du socketen "non blocking" och läser av med select när det kommit något.

129 ms totalt · 3 externa anrop · v20260731065814-full.c2d75422
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)