salut j'ai une connexion udp avec laquelle je recois des messages et
ensuite j'effetcure plusieurs operations sur ces messages
reception
tache 1
tache 2
.
.
seulement le temps que j'effecture toutes mes taches sur le message
recu ya une nouvelle reception et je perds des infos que je soustrait
de ces messages.
je vais essayer de resoudre le probleme en rajoutant un buffer
danslequel je stocke les messages et je les traite une par une (un
fifo).
ya t il un moyen plus simple(une libraire, un exemple de code...)pour
effectuer ceci : ne pas perdre des messages sur la reception et
pouvoir effectuer toutes les operations sur le message n avant de
passer au message n+1 ??
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
TestMan
Bonjour, Tu mets en place un thread d'écoute qui remplit ta pile FIFO, Ensuite ne te reste plus qu'a traiter cette pile avec un ou plusieurs thread de traitements.
Au passage, ne pas oublier que UDP n'est pas "fiable", contrairement à TCP. Si par contre tu cherches qqch de fiable et souple, essaye Javagroups, ça fait meme du multicast fiable.
Top :)
A+ TM
Enis wrote:
salut j'ai une connexion udp avec laquelle je recois des messages et ensuite j'effetcure plusieurs operations sur ces messages reception tache 1 tache 2 . . seulement le temps que j'effecture toutes mes taches sur le message recu ya une nouvelle reception et je perds des infos que je soustrait de ces messages. je vais essayer de resoudre le probleme en rajoutant un buffer danslequel je stocke les messages et je les traite une par une (un fifo).
ya t il un moyen plus simple(une libraire, un exemple de code...)pour effectuer ceci : ne pas perdre des messages sur la reception et pouvoir effectuer toutes les operations sur le message n avant de passer au message n+1 ??
merci d'avance
Bonjour,
Tu mets en place un thread d'écoute qui remplit ta pile FIFO,
Ensuite ne te reste plus qu'a traiter cette pile avec un ou plusieurs
thread de traitements.
Au passage, ne pas oublier que UDP n'est pas "fiable", contrairement à
TCP. Si par contre tu cherches qqch de fiable et souple, essaye
Javagroups, ça fait meme du multicast fiable.
Top :)
A+
TM
Enis wrote:
salut j'ai une connexion udp avec laquelle je recois des messages et
ensuite j'effetcure plusieurs operations sur ces messages
reception
tache 1
tache 2
.
.
seulement le temps que j'effecture toutes mes taches sur le message
recu ya une nouvelle reception et je perds des infos que je soustrait
de ces messages.
je vais essayer de resoudre le probleme en rajoutant un buffer
danslequel je stocke les messages et je les traite une par une (un
fifo).
ya t il un moyen plus simple(une libraire, un exemple de code...)pour
effectuer ceci : ne pas perdre des messages sur la reception et
pouvoir effectuer toutes les operations sur le message n avant de
passer au message n+1 ??
Bonjour, Tu mets en place un thread d'écoute qui remplit ta pile FIFO, Ensuite ne te reste plus qu'a traiter cette pile avec un ou plusieurs thread de traitements.
Au passage, ne pas oublier que UDP n'est pas "fiable", contrairement à TCP. Si par contre tu cherches qqch de fiable et souple, essaye Javagroups, ça fait meme du multicast fiable.
Top :)
A+ TM
Enis wrote:
salut j'ai une connexion udp avec laquelle je recois des messages et ensuite j'effetcure plusieurs operations sur ces messages reception tache 1 tache 2 . . seulement le temps que j'effecture toutes mes taches sur le message recu ya une nouvelle reception et je perds des infos que je soustrait de ces messages. je vais essayer de resoudre le probleme en rajoutant un buffer danslequel je stocke les messages et je les traite une par une (un fifo).
ya t il un moyen plus simple(une libraire, un exemple de code...)pour effectuer ceci : ne pas perdre des messages sur la reception et pouvoir effectuer toutes les operations sur le message n avant de passer au message n+1 ??
merci d'avance
ebh2
salut en fait j'ai pas opte pour un buffer dans lequel mettre les octets recus du message udp mais plutot pour un arraylist. mais utiliser un buffer serait peut etre plus optimal (un ByteBuffer ou autre...)
seulement j'ai toujours des problemes...soit je perds toujours des messages...soit l'interface se bloque....toute aide serait la bienvenue....merci
voila le code pour la connexion [code] import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.util.ArrayList; import java.util.List;
[/code] voila comme a chaque fois j'enleve le premier element faudra juste que je rajoute un test qd la liste n'as plus d'element...mais en tt cas ca simule une fifo...mais ca marche pas....
salut
en fait j'ai pas opte pour un buffer dans lequel mettre les octets
recus du message udp mais plutot pour un arraylist. mais utiliser un
buffer serait peut etre plus optimal (un ByteBuffer ou autre...)
seulement j'ai toujours des problemes...soit je perds toujours des
messages...soit l'interface se bloque....toute aide serait la
bienvenue....merci
voila le code pour la connexion
[code]
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
[/code]
voila comme a chaque fois j'enleve le premier element faudra juste que
je rajoute un test qd la liste n'as plus d'element...mais en tt cas ca
simule une fifo...mais ca marche pas....
salut en fait j'ai pas opte pour un buffer dans lequel mettre les octets recus du message udp mais plutot pour un arraylist. mais utiliser un buffer serait peut etre plus optimal (un ByteBuffer ou autre...)
seulement j'ai toujours des problemes...soit je perds toujours des messages...soit l'interface se bloque....toute aide serait la bienvenue....merci
voila le code pour la connexion [code] import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.util.ArrayList; import java.util.List;
[/code] voila comme a chaque fois j'enleve le premier element faudra juste que je rajoute un test qd la liste n'as plus d'element...mais en tt cas ca simule une fifo...mais ca marche pas....
no.bcausse.spam
Enis wrote:
salut
salut, j'ai merdé dans le suivi ;(
en fait j'ai pas opte pour un buffer dans lequel mettre les octets recus du message udp mais plutot pour un arraylist. mais utiliser un buffer serait peut etre plus optimal (un ByteBuffer ou autre...)
seulement j'ai toujours des problemes...soit je perds toujours des messages...soit l'interface se bloque....toute aide serait la bienvenue....merci
voila le code pour la connexion [code] import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.util.ArrayList; import java.util.List;
list et donc arraylist a des methodes non synchronized, voila qui est un gros probleme avec du multithreading.... changes avec un vecteur et test a te lire
public ConnexionUdp(final int port, int tailleBuffer) throws IOException {
buffer = new byte[tailleBuffer]; datagramPacket = new DatagramPacket(buffer, buffer.length); dataUdpList = new ArrayList();
try {
datagramSocket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void run() {
try { while (true) {
datagramSocket.receive(datagramPacket);
byte[] bufferdata = new byte[datagramPacket.getLength()];
[/code] voila comme a chaque fois j'enleve le premier element faudra juste que je rajoute un test qd la liste n'as plus d'element...mais en tt cas ca simule une fifo...mais ca marche pas....
-- bruno Causse http://perso.wanadoo.fr/othello
Enis <ebh2@wanadoo.fr> wrote:
salut
salut, j'ai merdé dans le suivi ;(
en fait j'ai pas opte pour un buffer dans lequel mettre les octets
recus du message udp mais plutot pour un arraylist. mais utiliser un
buffer serait peut etre plus optimal (un ByteBuffer ou autre...)
seulement j'ai toujours des problemes...soit je perds toujours des
messages...soit l'interface se bloque....toute aide serait la
bienvenue....merci
voila le code pour la connexion
[code]
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.List;
list et donc arraylist a des methodes non synchronized, voila qui est un
gros probleme avec du multithreading.... changes avec un vecteur et test
a te lire
public ConnexionUdp(final int port, int tailleBuffer) throws
IOException {
buffer = new byte[tailleBuffer];
datagramPacket = new DatagramPacket(buffer, buffer.length);
dataUdpList = new ArrayList();
try {
datagramSocket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void run() {
try {
while (true) {
datagramSocket.receive(datagramPacket);
byte[] bufferdata = new byte[datagramPacket.getLength()];
[/code]
voila comme a chaque fois j'enleve le premier element faudra juste que
je rajoute un test qd la liste n'as plus d'element...mais en tt cas ca
simule une fifo...mais ca marche pas....
en fait j'ai pas opte pour un buffer dans lequel mettre les octets recus du message udp mais plutot pour un arraylist. mais utiliser un buffer serait peut etre plus optimal (un ByteBuffer ou autre...)
seulement j'ai toujours des problemes...soit je perds toujours des messages...soit l'interface se bloque....toute aide serait la bienvenue....merci
voila le code pour la connexion [code] import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.util.ArrayList; import java.util.List;
list et donc arraylist a des methodes non synchronized, voila qui est un gros probleme avec du multithreading.... changes avec un vecteur et test a te lire
public ConnexionUdp(final int port, int tailleBuffer) throws IOException {
buffer = new byte[tailleBuffer]; datagramPacket = new DatagramPacket(buffer, buffer.length); dataUdpList = new ArrayList();
try {
datagramSocket = new DatagramSocket(port);
} catch (SocketException e) {
e.printStackTrace();
}
}
public void run() {
try { while (true) {
datagramSocket.receive(datagramPacket);
byte[] bufferdata = new byte[datagramPacket.getLength()];
[/code] voila comme a chaque fois j'enleve le premier element faudra juste que je rajoute un test qd la liste n'as plus d'element...mais en tt cas ca simule une fifo...mais ca marche pas....
-- bruno Causse http://perso.wanadoo.fr/othello
ebh2
voila ce que j'ai fait: ca marche pas....pourtant toutes mes methodes sont synchronise... aussi qd je fait ca : ThreadTraitements.currentThread().notify le thread ne se lance jamais.... et qd j'enleves les deux methodes synchroised pour le wait et le notify..je perd des message lors du traitements... kelkun a un exemple de code pour faire ca correctement? merci
public class ConnexionUdp extends Thread { private static List dataUdpLiast; public synchronized void run() {
try { while (true) { datagramSocket.receive(datagramPacket);
//Model etant une classe que je cree a partir du datagram recu } }
voila ce que j'ai fait:
ca marche pas....pourtant toutes mes methodes sont synchronise...
aussi qd je fait ca :
ThreadTraitements.currentThread().notify le thread ne se lance
jamais....
et qd j'enleves les deux methodes synchroised pour le wait et le
notify..je perd des message lors du traitements...
kelkun a un exemple de code pour faire ca correctement?
merci
public class ConnexionUdp extends Thread
{
private static List dataUdpLiast;
public synchronized void run()
{
try
{
while (true)
{
datagramSocket.receive(datagramPacket);
voila ce que j'ai fait: ca marche pas....pourtant toutes mes methodes sont synchronise... aussi qd je fait ca : ThreadTraitements.currentThread().notify le thread ne se lance jamais.... et qd j'enleves les deux methodes synchroised pour le wait et le notify..je perd des message lors du traitements... kelkun a un exemple de code pour faire ca correctement? merci
public class ConnexionUdp extends Thread { private static List dataUdpLiast; public synchronized void run() {
try { while (true) { datagramSocket.receive(datagramPacket);