Probleme mit UDP

Status
Nicht offen für weitere Antworten.

RobDom

Mitglied
Hallo zusammen,

ich hab ein Performance Problem mit UDP.

Hab zu diesem Thema im Zusammenhang mit java3D letztes Jahr schon mal was gepostet,
bin aber leider immer noch zu keinem Ergebnis gekommen.

Ich hab zwei Klassen data, receive. Eigentlich ganz simple: receive Liest Daten ein,
data schreibt sie auf die Konsole. Soweit so gut.

Mein Problem: Das ganze wird langsamer und wieder schneller!!!
Man kann also in der Konsole sehen, die Zeilen mit den Daten laufen erst schnell
und dann immer langsamer, dann wieder schneller und so weiter. Sieht so aus als ob
ein Speicher voll läuft, o.ä. Das ganze wird später für mich Problematisch, da ich mit den Daten
Grafik animiere --> Das führt also zu ruckeln, stocken der Bewegung, etc. aber das ist ja erst mal egal:
Probleme sieht man schon nur bei der Ausgabe auf der Konsole.

Hab ich was falsch gemacht, oder sonst irgendwelche Ideen??????????

Danke schonn mal !

Gruß RobDom

PS: Muss bei UDP bleiben.

Code:
public class data extends JFrame implements Runnable{
	
	public static float[] data = new float[10];	
	public static TextArea console = new TextArea();
	
	public data() {
		
		for (int i=0; i<10; i++) {
			data[i]= 0;
			
		}
		
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
		this.setMinimumSize(this.getToolkit().getScreenSize());
		this.setExtendedState(JFrame.MAXIMIZED_BOTH);
		this.setLayout(new BorderLayout());
		this.add("Center",console);
		
		
		this.repaint();
		this.setVisible(true);
		this.run();
	}
	
	public void run(){
				
		while (true){
			new receive();
			for (int i=0; i<10; i++) {
				
				console.append(data[i] + "   ");
				
			}
			
			console.append("\n____________________________________\n");
		}
		
	}
	
	public static void main(String[] args) {
		
		new data();		
		
	} // end main
}

Code:
public class receive{
	
	public static int port = 2500;
	public static InetAddress ip = null;
	public static DatagramPacket datagramPacket = null;
	public static DatagramSocket datagramSocket = null;
	public static byte[] inbuffer = new byte[120];
	public ByteBuffer byteBuffer = ByteBuffer.allocate(120);	
	public static boolean init = false;
	
	public receive(){
		
		init();
		writeData(byteBuffer);

	}
	
	public void init(){
		
		datagramPacket = new DatagramPacket(inbuffer, inbuffer.length, ip, port);
		
		try {	 
			ip = InetAddress.getByName("10.3.71.44");
			datagramSocket = new DatagramSocket(port, ip);		
		} 
		
		catch (UnknownHostException e1) {}
		catch (SocketException e2) {}
		
		init = true;
	}
	
	public static void writeData(ByteBuffer buffer){
		
		try{
			datagramSocket.receive(datagramPacket);
			buffer = ByteBuffer.wrap(inbuffer, 0, 120);
			
			for (int i=0; i<10; i++) {
				data.data[i] =  buffer.getFloat(80+i*4);
			}
		}
			
		catch (UnknownHostException e3) {}
		catch (SocketException e4) {}
		catch (IOException e5) {}
			
		
	}


	public static void main(String[] args) {
		
		new receive();		
		
	} // end main
	
	
}
 
T

tuxedo

Gast
Kann es vielleicht sein dass du in einer Schleife (run()) immer und immer wieder mit "new" ein Objekt erzeugst das irgendwann mal vom GV aufgeräumt werden muss?

Sieht nicht effizient aus. Starte, nachdem du das Programm gestartet hast mal "jconsole" aus deiner JDK-Installtion und schaue wie sich der Speicher verhält und was der GC so treibt.

- Alex
 

RobDom

Mitglied
... das war nur ein Test, um das ganze auf mehrere Klassen, Threads aufzuteilen.

Wenn ich alles in eine Klasse packe und in der run() while(true) nur receive und speichere
in einen Array, hab ich genau das gleiche.

Mein eigentliches Programm steuert eine java3D Grafik, und die ruckelt dann...

Ideen??

Danke und Gruß
 

RobDom

Mitglied
...ich hab Euch mal eine abgespeckte Version meines Programms
gebastelt, in dem man den Fehler sehr schön sehen kann.

ABER: immernoch das gleiche Problem:

Ist jetzt ein ColorCube, der sich um eine Achse dreht.
--> Mach ich das mit Scrollbar alles o.k.
--> Mit Daten über UDP ist es erst genauso schnell,
dann nach einer Zeit wirds sehr langsam und wieder schneller, usw.

Hab Eclipse, NetBeans, Konsole und .JAR ausprobiert und der Fehler bleibt
Ich denke immer noch es könnte an Speicher, Stack, Puffer, GarbageCollector, o.ä. liegen ????

Ich hoffe es hat einer eine Idee, ich verzweifel bald........

Danke und Gruß RobDom

PS: Zum testen muss die IP angepasst werden und Daten über UDP (Byte 80) kommen,
bei mir sind es einfach floats von 0 bis 360 und wieder von vorne.



Code:
package testudp;

import com.sun.j3d.utils.geometry.ColorCube;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GraphicsConfiguration;
import java.awt.Panel;
import java.awt.Scrollbar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;

import javax.media.j3d.BranchGroup;
import javax.media.j3d.Canvas3D;
import javax.media.j3d.Transform3D;
import javax.media.j3d.TransformGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.vecmath.AxisAngle4f;

import com.sun.j3d.utils.universe.SimpleUniverse;


public class Main extends JFrame implements Runnable{
	
	public  int port = 2500;
	public  InetAddress IP = null;
	public  DatagramPacket datagramPacket = null;
	public  DatagramSocket Socket = null;
	public  byte[] inbuffer = new byte[120];
	public  ByteBuffer byteBuffer = ByteBuffer.allocate(120);	
			
	public  Scrollbar scrollTheta = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 10);
        public  JButton stop = new JButton("STOP / START");
	public  boolean stopped = true;
        
	public  GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
	public  Canvas3D canvas  = new Canvas3D(config);
	public  SimpleUniverse u = null;
	
        public  BranchGroup root = new BranchGroup();
        public  TransformGroup trans = new TransformGroup();
	public  Transform3D tra3d = new Transform3D();
        public  AxisAngle4f axis4f = new AxisAngle4f();
        public  float angle = 0.0f;
	
	
	public Main() {
		
		datagramPacket = new DatagramPacket(inbuffer, inbuffer.length, IP, port);
		try {	 
                        IP = InetAddress.getByName("10.3.71.44");
			Socket = new DatagramSocket(port, IP);	
			byteBuffer = ByteBuffer.wrap(inbuffer, 0, 120);
		} 
		catch (UnknownHostException e) {}
		catch (SocketException e) {}
				
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
		this.setMinimumSize(this.getToolkit().getScreenSize());
		this.setExtendedState(JFrame.MAXIMIZED_BOTH);
		
                this.setLayout(new BorderLayout());
		Panel panel = new Panel();
		panel.add("North",stop);
                panel.add("South",scrollTheta);
		scrollTheta.setPreferredSize(new Dimension(200, 50));
		scrollTheta.setMinimum(0);
		scrollTheta.setMaximum(360);
		scrollTheta.setBlockIncrement(1);
		scrollTheta.setEnabled(true);
                this.add("North",panel);
				
		u = new SimpleUniverse(canvas);
		u.getViewingPlatform().setNominalViewingTransform();
		this.add("Center",canvas);
				
		trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
		trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);	
		trans.addChild(new ColorCube(0.3));
		
                axis4f.angle = (float)(Math.PI/180*angle);
                axis4f.x =0.0f;
                axis4f.y =1.0f;
                axis4f.z =0.0f;
                tra3d.setScale(0.3);
	        tra3d.setRotation(axis4f);
		trans.setTransform(tra3d);
                root.addChild(trans);
		u.addBranchGraph(root);
		canvas.setVisible(true);
		
		stop.addActionListener(new ActionListener(){		
	
		public void actionPerformed (ActionEvent e){
				
					stopped = !stopped;
					
		}
		});
				
                this.repaint();
		this.setVisible(true);
		this.run();		
	}
	
	
	public void run() {
		
                while (true) {
                    
			if (!stopped){
                                try {	 
					Thread.sleep(30);
                                        
                                        try{
                                                Socket.receive(datagramPacket);
                                        }		
                                        catch (UnknownHostException e) {}
                                        catch (SocketException e) {}
                                        catch (IOException e) {}
                                       
                                        angle = byteBuffer.getFloat(80);					
                                        axis4f.angle = (float)(Math.PI/180*angle);
					tra3d.setRotation(axis4f);
					trans.setTransform(tra3d);						
				} 
				catch (InterruptedException e) {}
			}
			
			if (stopped){
				try {	 
					Thread.sleep(30);
					
                                        angle = (float)scrollTheta.getValue();
					axis4f.angle = (float)(Math.PI/180*angle);
                                       	tra3d.setRotation(axis4f);
					trans.setTransform(tra3d);						
				} 
				catch (InterruptedException e) {}
			}							
		}
	}

	
	public static void main(String[] args) {
		
		new Main();		
		
	}	
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
platofan23 Probleme mit Socket bei Android Studio? Netzwerkprogrammierung 22
J Probleme mit Multicast über IPv6, DatagramChannel Netzwerkprogrammierung 1
Niggo_ Probleme mit Java Mail Netzwerkprogrammierung 14
F Probleme mit Connection Reset bei Telnet Verbindung Netzwerkprogrammierung 1
K Probleme bei HTML-Mail-Abruf mit IMAP bei 1und1 Netzwerkprogrammierung 2
L Socket SSLServer Probleme Netzwerkprogrammierung 0
H Probleme mit UDP Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
R Probleme mit JMS Netzwerkprogrammierung 1
A Probleme beim Klassen-Import von sun.misc. ... Netzwerkprogrammierung 19
M RMI RMI Probleme zwischen Client und Server Netzwerkprogrammierung 5
B Probleme beim ersten Netzwerkprogramm Netzwerkprogrammierung 3
M Probleme mit FTP Netzwerkprogrammierung 19
windl URLConnection unter 1.7 macht Probleme Netzwerkprogrammierung 14
Z Socket Probleme beim Senden und Empfangen Netzwerkprogrammierung 5
Z Probleme beim Senden von Nachrichten an den Server Netzwerkprogrammierung 9
Maxim6394 Probleme bei Messenger Netzwerkprogrammierung 16
I Socket UDP Hole Punching bereitet Probleme Netzwerkprogrammierung 14
C Socket Probleme beim Lesen und Schreiben aus/in einen Socket Netzwerkprogrammierung 2
S HTTP Probleme mit POST-Befehl Netzwerkprogrammierung 2
R FTPS - Probleme mit FTPSClient Netzwerkprogrammierung 2
S Probleme mit XMLEncoder/XMLDecoder Netzwerkprogrammierung 2
D Server - Client Probleme Netzwerkprogrammierung 9
Weiti HTTP Zertifikat-Probleme - InstallCert.java Netzwerkprogrammierung 2
M Socket Probleme mit einfacher Socketverbindung Netzwerkprogrammierung 3
H Probleme mit GUI (RMI) Netzwerkprogrammierung 6
T RMI Probleme mit RMI-Server Netzwerkprogrammierung 4
J Probleme bei RSA mit byte[] bei Versand über RMI Netzwerkprogrammierung 2
T FTP Probleme mit Passiv und Binary Mode Netzwerkprogrammierung 3
J Probleme mit Threads (Client terminiert) Netzwerkprogrammierung 4
S Socket SocketServer und Client machen Probleme Netzwerkprogrammierung 6
B Server / Client Anwendung, Client GUI Probleme Netzwerkprogrammierung 11
F RMI probleme Netzwerkprogrammierung 3
D Probleme bei mehreren Clients uns Senden von Messages Netzwerkprogrammierung 16
E jPcap Probleme Netzwerkprogrammierung 3
B HTTP Probleme mit HttpClient? Netzwerkprogrammierung 2
T Probleme mit Jpcap Netzwerkprogrammierung 18
P Probleme mit OutputStream Netzwerkprogrammierung 7
P Probleme beim weiter senden von Datein Netzwerkprogrammierung 10
B Probleme mit FTP verbindung Netzwerkprogrammierung 22
L Probleme bei Chatserver Netzwerkprogrammierung 6
A Probleme mit kleinem Netzwerk Programm Netzwerkprogrammierung 30
S Probleme beim senden von Daten per POST Methode an PHP Scrip Netzwerkprogrammierung 5
G Probleme mit SecruityManager + RMI Netzwerkprogrammierung 10
derMartin Probleme mit NNTP Client Netzwerkprogrammierung 2
A Probleme mit Citrix Netzwerkprogrammierung 17
A Probleme mit kleinem Messenger-Programm Netzwerkprogrammierung 4
K RXTXcomm : Install - Probleme Netzwerkprogrammierung 7
P Probleme bei Chat programm Netzwerkprogrammierung 2
I Probleme mit 'JSSE Samples' von Sun Netzwerkprogrammierung 5
T RMI - Probleme beim Starten des Clients Netzwerkprogrammierung 4
E InetAddress Klasse-Probleme Netzwerkprogrammierung 4
M dateien übertragen, probleme mit versch. Strömen? Netzwerkprogrammierung 4
R Rechte Probleme bei Applets Netzwerkprogrammierung 16
D EA-Exception Network Adapter macht probleme Netzwerkprogrammierung 2
G Probleme mit Firewall beim empfangen von dateien über socket Netzwerkprogrammierung 6
P Probleme mit Input- / Output-Streams Netzwerkprogrammierung 2
V probleme mit dem chat programm Netzwerkprogrammierung 4
F WLAN Probleme (CLIENT-SERVER) Netzwerkprogrammierung 4
J Probleme mit ObjectOutputStream! Netzwerkprogrammierung 15
S Probleme beim Beschränken der Geschwindigkeit Netzwerkprogrammierung 6
M Probleme beim Abfangen von Streams Netzwerkprogrammierung 5
G Fragen/Probleme mit JavaMail Netzwerkprogrammierung 2
N Java-Chat (lauffähig) macht Probleme auf der Konsole Netzwerkprogrammierung 6
P Probleme mit einem Array aus Sockets Netzwerkprogrammierung 2
C Probleme bei Dateiupload mit socket Netzwerkprogrammierung 4
T FTP Chatprogramm probleme Netzwerkprogrammierung 2
C RMI Probleme mit iptables Netzwerkprogrammierung 2
D socket exception + timing probleme Netzwerkprogrammierung 2
G Probleme bei Proxy-Server! Netzwerkprogrammierung 5
S Probleme mit HttpURLConnection Netzwerkprogrammierung 10
D Habe 2 Probleme: Input eingabe und Multi Socket Server Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben