Hallo, unten habe ich Codes für Anwendung der Clientseite und der Serverseite aufgeschrieben. Leider habe ich schwierigkeiten meine Ideen zu Fehlerbehandlung bei UDP Datenübertragung in Java Code umzustezen und würde mich über Tipps freuen.
Folgende Fehler sollen behandelt werden:
-Paketverlust
-Falsche Datenübertragung
Zeit Messen:
-Transferzeit messen
mein Ansatz zu Paketverlust:
Das erste bit des Pakets wird für die Sequenznummer reserviert, diese wird dann mit dem
Paket mitgeschickt. Erst wenn die Sequenznummer auf der Sender- und
Empfängerseite übereinstimmt, kann ein weiteres Paket verschickt werden, sonst
soll das erste Paket nochmal verschickt werden.
Bitfehlerrate:
Die CRC-Werte werden auf der Sender und Empfänger Seite ausgerechnet und
miteinander verglichen. Wenn beide Werte übereinstimmen, dann ist der
Rahmen unverfälscht angekommen.
Transferzeit:
Um die Transferzeit zu messen, wird vor dem Absenden des Rahmens ein Timer
gesetzt, der die aktuelle Zeit speichert. Beim erfolgreichen Ankommen des
Rahmens speichert der zweite Timer die aktuelle Zeit. Die Differenz der beiden
Zeiten ist dann die Transferzeit des gesendeten Rahmens.
Server
Client
Danke im voraus
Gruß
Folgende Fehler sollen behandelt werden:
-Paketverlust
-Falsche Datenübertragung
Zeit Messen:
-Transferzeit messen
mein Ansatz zu Paketverlust:
Das erste bit des Pakets wird für die Sequenznummer reserviert, diese wird dann mit dem
Paket mitgeschickt. Erst wenn die Sequenznummer auf der Sender- und
Empfängerseite übereinstimmt, kann ein weiteres Paket verschickt werden, sonst
soll das erste Paket nochmal verschickt werden.
Bitfehlerrate:
Die CRC-Werte werden auf der Sender und Empfänger Seite ausgerechnet und
miteinander verglichen. Wenn beide Werte übereinstimmen, dann ist der
Rahmen unverfälscht angekommen.
Transferzeit:
Um die Transferzeit zu messen, wird vor dem Absenden des Rahmens ein Timer
gesetzt, der die aktuelle Zeit speichert. Beim erfolgreichen Ankommen des
Rahmens speichert der zweite Timer die aktuelle Zeit. Die Differenz der beiden
Zeiten ist dann die Transferzeit des gesendeten Rahmens.
Server
Java:
public class FileTransferServer {
public static void main(String args[]) throws Exception{
// Arguments: port & filename
int s = 12345;
String filename = "sink.txt";
// Open datagramm socket
javax.net.DatagramSocket dtgSock;
dtgSock = new javax.net.DatagramSocket(s);
byte[] buf = new byte[5000];
java.io.FileOutputStream fw = new java.io.FileOutputStream(filename);
DatagramPacket packet = new DatagramPacket(buf, buf.length);
while (true){
dtgSock.receive(packet);
System.out.print("*");
// if receive an empty packet will indicate end of file
if (packet.getLength()==0) break;
fw.write(packet.getData(),0,packet.getLength());
}
fw.flush();
fw.close();
dtgSock.close(); // Close the Socket
}
}
Client
Java:
import java.net.*; // we use Sockets
import java.util.zip.*;
public class FileTransferClient {
public static void main(String args[]) throws Exception{
String srvName = "localhost";
int srvPort = 12345;
String filename = "source.txt";
// Open datagramm socket
javax.net.DatagramSocket dtgSock;
dtgSock = new javax.net.DatagramSocket();
InetSocketAddress srvSockAddr = new InetSocketAddress(srvName, srvPort);
dtgSock.connect(srvSockAddr);
byte[] buf = new byte[5];
java.io.FileInputStream fr = new java.io.FileInputStream(filename);
int len; // number of bytes written from the file
while ((len=fr.read(buf,0,buf.length))!= -1){
DatagramPacket packet = new DatagramPacket(buf, len);
dtgSock.send(packet);
System.out.print("*");
Thread.sleep(100);
}
// Send an empty packet to the server to indicate end of file
DatagramPacket packet = new DatagramPacket(buf, 0);
dtgSock.send(packet);
dtgSock.close(); // Close the Socket
}
}
Danke im voraus
Gruß
Zuletzt bearbeitet: