Posted: Juni 21st, 2011 | Filed under: Java, Programmieren | Tags: Beispiel, chat, Example, Java, Mulitcast, MulticastSocket, network, Netzwerk Nachricht, senden, Socket, Tutorial | 2 Comments »
Als ich meinen Netzwerk-Chat jLanChat programmiert habe, musste ich mich intensiv mit diesem Thema beschäftigen. Herkömmlicherweise verwendet man zum versenden von Nachrichten das sogenannte Client-Server Prinzip. Will zum Beispiel PC1 eine Nachricht an PC2 senden so muss PC2 einen Socket öffnen mit dem sich PC1 dann verbindet und über diesen Socket die Nachricht sendet. Will man nun eine Nachrichtenleitung mit mehren PCs aufbauen so benötigt man schnell einen Server, mit dem sich dann alle Clients verbinden und über diesen dann kommunizieren.
Wenn wir die Kommunikation über Multicast (Punkt zu Gruppe) tätigen brauchen wir keinen Server. Denn fast alle Router/Switches unterstützen Multicast.
Alle Teilnehmer verbinden sich mit dem Switch/Router und treten einer Gruppe, in Form einer IP-Adresse und eines Ports (z.B.: 230.0.0.1:4447), bei. Bekommt der Switch/Router jetzt eine Nachricht eines Clients mit der Gruppen-Adresse als Zieladresse vervielfältigt der Switch/Router diese Nachricht und sendet sie an alle die der Gruppe beigetreten sind, auch an den der die Nachricht abgesendet hat. So kann man zum Beispiel einen serverlosen Chat aufbauen. Wenn man’s genau nimmt übernimmt der Switch/Router jetzt unsere Serverfunktion.
Um das Ganze in JAVA zu realisieren muss man folgende Bibliothek ins Projekt einbinden: http://commons.apache.org/lang/
Hier unser Beispiel, Es gibt eine Sender-Klasse und eine Empfänger-Klasse:
Sender
import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class Sender { public static void main(String[] args) { // Netzwerk-Gruppe String NETWORK_GROUP = "230.0.0.1"; // Netzwerk-Gruppen Port int NETWORK_GROUP_PORT = 4447; // Client-Port int CLIENT_MULTICAST_PORT = 4446; // Nachrichten-Codierung String TEXT_ENCODING = "UTF8"; try { MulticastSocket socket = new MulticastSocket(CLIENT_MULTICAST_PORT); byte[] message = "Hallo Welt".getBytes(TEXT_ENCODING); // Nachricht an Gruppe senden socket.send(new DatagramPacket(message, message.length , InetAddress.getByName(NETWORK_GROUP) , NETWORK_GROUP_PORT)); } catch (IOException e) { e.printStackTrace(); } } } |
Empfänger
import java.io.IOException; import java.net.DatagramPacket; import java.net.InetAddress; import java.net.MulticastSocket; public class Receiver { public static void main(String[] args) { // Netzwerk-Gruppe String NETWORK_GROUP = "230.0.0.1"; // Netzwerk-Gruppen Port int NETWORK_GROUP_PORT = 4447; // Nachrichten-Codierung String TEXT_ENCODING = "UTF8"; InetAddress group; MulticastSocket socket; try { // Gruppe anlegen group = InetAddress.getByName(NETWORK_GROUP); socket = new MulticastSocket(NETWORK_GROUP_PORT); // Gruppe beitreten socket.joinGroup(group); byte[] bytes = new byte[65536]; DatagramPacket packet = new DatagramPacket(bytes, bytes.length); while(true){ // Warten auf Nachricht socket.receive(packet); String message = new String(packet.getData(),0,packet.getLength(), TEXT_ENCODING); System.out.println(message); } } catch (IOException e) { e.printStackTrace(); } } } |
Ich hoffe ich konnte dem ein oder anderen damit helfen.
Das ganze könnt ihr euch als Eclipse Projekt hier herunterladen (inklusive Bibliotheken): Eclipse Projekt – Tutorial Net Send
Posted: Mai 21st, 2011 | Filed under: Allgemein, Programmieren, Tutorials | Tags: Array, Element aus Array löschen, Element löschen, JavaScript, JQuery | 6 Comments »
Wenn ihr ein Element aus einem Array in JavaScript löschen wollt könnt ihr dies über eine spzielle Methode namens splice(). Das ganze funktioniert folgendermaßen.
// Array anlegen
var names = new Array("Peter","Klaus","Maria","Lukas");
// Maria löschen!
var deleteIndex = 2;
// Der erste Parameter gibt an ab welchem Index gelöscht werden soll.
// Der zweite wieviele einschließlich diesem Index herrausgelöscht werden sollen.
// In unserem fall lediglich einen, nämlich "Maria"
names.splice(deleteIndex,1);
// Übrig bleibt der Array: ["Peter","Klaus","Lukas"]
Ich hoffe ich konnte dem ein oder anderen helfen! 🙂
Posted: Mai 13th, 2011 | Filed under: Programmieren | Tags: Beispiel, code, Example, PHP, redirect, Weiterleitung | No Comments »
Oft braucht man bei einer PHP-Webanwendungen Weiterleitungen, zum Beispiel bei einem Login-System.
Hier das Codebeispiel:
Header("Location: login.php");
Posted: April 26th, 2011 | Filed under: Internet, Programmieren, Software | Tags: Ladezeit, verkürzen, Wordpress | 5 Comments »
Bei einem Aufruf eines Blogs werden serverseitig viele Leseoperationen durchgeführt. Der PHP-Code muss interpretiert werden und Einträge aus der Datenbank müssen geholt werden. Erst dann kann die Seite an den Benutzer gesendet werden. Um diese Zeit zu verkürzen hat man die Möglichkeit mittels dem Plugin WP-Super-Cache die Seiten des Blogs zwischen zu speichern, so dass zum Beispiel gar keine Datenbankaufrufe mehr getätigt werden müssen. Ich hab das Plugin mal getestet und die Zeit stoppen lassen.
Vorher
Stolze 4,84 Sekunden Ladezeit

Nachher
Schlappe 1,23 Sekunden Ladezeit.

Das Plug-In ist also aufjedenfall sehr empfehlenswert!
Posted: April 24th, 2011 | Filed under: Java, Programmieren | Tags: abspielen, Applet, Java, play, sound, WAV | No Comments »
Will man in einem Java Applet eine WAV–Datei abspielen ohne auf die lokale Festplatte zugreifen zu müssen, also ohne dass der Benutzer eine Sicherheitsfrage gestellt bekommt, muss man die Applet eigene Methode getAudioClip verwenden. Leider funktioniert diese nicht für MP3s oder OGG.
Beispiel Applet
Applet-Quellcode
import java.applet.AudioClip; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.MalformedURLException; import java.net.URL; import javax.swing.JApplet; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class PlayWav extends javax.swing.JApplet { public static JApplet playWav; private JButton playButton; private JButton stopButton; // Audio private AudioClip audioClip; public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame(); PlayWav inst = new PlayWav(); frame.getContentPane().add(inst); ((JComponent) frame.getContentPane()).setPreferredSize(inst .getSize()); frame.pack(); frame.setVisible(true); } }); } public PlayWav() { super(); initGUI(); } private void initGUI() { try { playWav = this; BorderLayout thisLayout = new BorderLayout(); getContentPane().setLayout(thisLayout); { playButton = new JButton(); getContentPane().add(playButton, BorderLayout.CENTER); playButton.setText("play"); // Play // Wav Datei online abspielen mittels der Applet-Methode // getAudioClip. playButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { try { // alarm.wav liegt in // http://blog.mynotiz.de/howTo/PlayWav/alarm.wav URL url = new URL(getDocumentBase().toString()); audioClip = playWav.getAudioClip(url, "alarm.wav"); } catch (MalformedURLException e) { e.printStackTrace(); } // Play normal audioClip.play(); // Play in loop // audioClip.loop(); } }); } { stopButton = new JButton(); getContentPane().add(stopButton, BorderLayout.SOUTH); stopButton.setText("stop"); // Stop stopButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { audioClip.stop(); } }); } } catch (Exception e) { e.printStackTrace(); } } } |
HTML-Quellcode
<applet style="border: 1px solid black;" code="PlayWav.class" archive="playWav.jar"> Ihr Browser unterstütz keine Java Applets! </applet>
Wie ihr aus eurem Code ein Applet erzeugt erfahrt ihr hier.
FTP-Ordner
Im FTP-Verzeichnis sieht das ganze dann wie folgt aus.
