Hallo
Ich habe einen TCP Sender und eine Empfänger funktioniert soweit auch ganz gut. Nur wenn ich in Linux den Traffic für TCP begrenze also zb knapp unter die Grenze was mein Sender gerade Sendet dann kommen bei dem Empfänger nur noch leere Pakete an!
Ich schicke im Moment als Inhalt immer eine Zahl die ich nach jedem Paket um 1 erhöhe.
mein Sender sieht so aus:
Mein Empfänger nimmt sich das empfangene Paket und schreibt das in eine Datei
Empfänger Kurzfassung:
Ich sende immer Pakete mit fester Länge von 1460 byte.
Die Log Datei auf dem Empfänger sieht so aus:
Die 0 schreib ich immer automatisch rein wenn der Empfangene String die Länge 0 hat
kann mir einer sagen wo die Pakete hin sind?
TCP müsste sich doch darum kümmern das die Pakete immer ankommen oder muss ich da noch was machen?
Ich dachte TCP hält sich die Pakete intern bis sie bestätigt wurden? Muss ich die noch irgendwo aufbewahren?
danke für die hilfe
Ich habe einen TCP Sender und eine Empfänger funktioniert soweit auch ganz gut. Nur wenn ich in Linux den Traffic für TCP begrenze also zb knapp unter die Grenze was mein Sender gerade Sendet dann kommen bei dem Empfänger nur noch leere Pakete an!
Ich schicke im Moment als Inhalt immer eine Zahl die ich nach jedem Paket um 1 erhöhe.
mein Sender sieht so aus:
Code:
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import outbreaker.ExceptionErrorHandler;
import outbreaker.debuggen.LogFile;
public class Client {
private BufferedOutputStream out;
private Socket socket;
private LogFile logFile;
private byte[] data = new byte[1460];
private Message message = new Message(1460);
public Client() {
createSocket();
disableNaglesAlgorithmus();
run();
}
protected void createSocket(){
try {
socket = new Socket(getAddress(),51000);
out = new BufferedOutputStream(socket.getOutputStream());
} catch (IOException e) {
System.err.println(e);
}
initLogFile();
}
public void initLogFile(){
logFile = new LogFile("Protocol Files T","TEST","csv");
}
public InetAddress getAddress(){
try {
return InetAddress.getByName("192.168.100.1");
} catch (UnknownHostException e) {
System.err.println(this.getClass().toString() + " " + e.toString());
}
return null;
}
public void disableNaglesAlgorithmus(){
try {
socket.setTcpNoDelay(false);
} catch (SocketException e) {
System.err.println("TCPClient:\n"+
"enableNaglesAlgorithmus()\n"
+ e.toString() +
"\nServerPort: \t" + 51000 +
"\nServerAdresse: \t" + getAddress());
}
}
protected void closeSocket() throws IOException {
socket.close();
}
protected void send() throws IOException{
data = message.getNextMessageCounter(); //gibt den byte Array zurück
out.write(data, 0, data.length);
out.flush();
logFile.writeln(message.toString()+";"); //schreibt das gesendete in eine Datei
try {
Thread.sleep(3);
} catch (InterruptedException e) {
ExceptionErrorHandler.showException("TCPClient: "+ e);
}
}
public void run(){
while (true)
{
try {
send();
} catch (IOException e) {
e.printStackTrace();
break;
}
}
}
}
Mein Empfänger nimmt sich das empfangene Paket und schreibt das in eine Datei
Empfänger Kurzfassung:
Code:
private BufferedInputStream in;
private ServerSocket sersock;
private Socket sock;
private byte[] data;
protected void createSocket() {
data = new byte[1460];
try {
sersock = new ServerSocket(51000);
sock = sersock.accept();
in = new BufferedInputStream(sock.getInputStream());
}
catch(SocketException se)
{
ExceptionErrorHandler.showException("TCP Server: " + "Socket problem " + se.getMessage());
}
catch(Exception e)
{
ExceptionErrorHandler.showException("TCP Server: " + "Couldn't start " + e.getMessage());
}
}
protected void receive() throws IOException {
in.read(data);
getLogFile().writeln(new String(data,0,new String(data).indexOf(0)));
}
Ich sende immer Pakete mit fester Länge von 1460 byte.
Die Log Datei auf dem Empfänger sieht so aus:
1
2
3
4
5
6
0
0
0
0
0
10
11
12
13
...
Die 0 schreib ich immer automatisch rein wenn der Empfangene String die Länge 0 hat
kann mir einer sagen wo die Pakete hin sind?
TCP müsste sich doch darum kümmern das die Pakete immer ankommen oder muss ich da noch was machen?
Ich dachte TCP hält sich die Pakete intern bis sie bestätigt wurden? Muss ich die noch irgendwo aufbewahren?
danke für die hilfe