Also, ich kann meine Fragen leider nur recht unpräzise beschreiben, deßhalb hatte ich mit Google leider keinen großen Erfolg.
1. Was bewirken die Größen der receive-, bzw. send Buffer eines Sockets? Es können schließlich kaum die Größe des tatsächlichen TCP packets sein.
Ich dachte bisher, dass ein TCP packet ohne header etwa 1500byte groß ist. (Ich erinnere mich an einen Tag, an welchem ich einen Wert namens MTU umstellen wollte). Die beiden Buffer jedoch sind
Standartmäßig viel größer. (195984byte in meinem Programm)
Auch habe ich gelesen, dass dieser Wert nicht über 64kb sein solle.?! (64kb < 196kb)
Des weiteren setze ich im Programm (unten) die buffer Größen auf 16byte. Nach dem 1. read() jedoch ist sie auf 195968 (=195984-16) und nach dem 2. read() auf 195952 (=195954-32)
In meinem Kopf ergibt all das keinen Sinn. ;(
Noch eine kleine Frage etwas ab vom Thema:
(Wie) kann man solch ein Programm mit Hilfe eines Buffered(In/Out)-putStreams beschleunigen?
Diese Methoden umfassen ALLE ausgeführten Methoden, ausser main(), in welcher jedoch nur "init();" steht.
1. Was bewirken die Größen der receive-, bzw. send Buffer eines Sockets? Es können schließlich kaum die Größe des tatsächlichen TCP packets sein.
Ich dachte bisher, dass ein TCP packet ohne header etwa 1500byte groß ist. (Ich erinnere mich an einen Tag, an welchem ich einen Wert namens MTU umstellen wollte). Die beiden Buffer jedoch sind
Standartmäßig viel größer. (195984byte in meinem Programm)
Auch habe ich gelesen, dass dieser Wert nicht über 64kb sein solle.?! (64kb < 196kb)
Des weiteren setze ich im Programm (unten) die buffer Größen auf 16byte. Nach dem 1. read() jedoch ist sie auf 195968 (=195984-16) und nach dem 2. read() auf 195952 (=195954-32)
In meinem Kopf ergibt all das keinen Sinn. ;(
Noch eine kleine Frage etwas ab vom Thema:
(Wie) kann man solch ein Programm mit Hilfe eines Buffered(In/Out)-putStreams beschleunigen?
Diese Methoden umfassen ALLE ausgeführten Methoden, ausser main(), in welcher jedoch nur "init();" steht.
Java:
private static void init() throws Exception{
ServerSocket ss = new ServerSocket(9998);
ss.setReceiveBufferSize(16);
new Thread(){
public void run(){
try {
Thread.yield();
Socket socket2 = new Socket("localhost",9998);
sender(socket2);
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
Socket socket1 = ss.accept();
receiver(socket1);
}
Java:
private static void sender(Socket s) throws Exception{
s.setSendBufferSize(16);
System.out.println("TX: BufferSize:" + s.getSendBufferSize());
byte[] buffer = new byte[s.getSendBufferSize()];
Arrays.fill(buffer, Byte.MAX_VALUE);
System.out.println("TX: BufferSize:" + s.getSendBufferSize());
s.getOutputStream().write(buffer);
System.out.println("TX: BufferSize:" + s.getSendBufferSize());
s.getOutputStream().write(buffer);
System.out.println("TX: BufferSize:" + s.getSendBufferSize());
}
Java:
private static void receiver(Socket s) throws Exception{
System.out.println("RX: BufferSize:" +s.getReceiveBufferSize());
s.setReceiveBufferSize(16);
System.out.println("RX: BufferSize:" +s.getReceiveBufferSize());
while(true){
byte[] buffer = new byte[s.getReceiveBufferSize()];
System.out.println("RX inLoop: BufferSize:" +s.getReceiveBufferSize());
//Das Programm endet mit dieser (Endlos-)Schleife.
while(s.getInputStream().available()<1)
Thread.yield();
long l = System.currentTimeMillis();
s.getInputStream().read(buffer);
System.out.println("RX inLoop: " + (System.currentTimeMillis()-l));
System.out.println("RX inLoop: Length of Input without 0: " + new String(buffer).trim().length());
}
}
TX: BufferSize:16
RX: BufferSize:195984
TX: BufferSize:16
RX: BufferSize:16
RX inLoop: BufferSize:16
TX: BufferSize:16
TX: BufferSize:16
RX inLoop: 1
RX inLoop: Length of Input without 0: 16
RX inLoop: BufferSize:195968
RX inLoop: 0
RX inLoop: Length of Input without 0: 16
RX inLoop: BufferSize:195952
RX: BufferSize:195984
TX: BufferSize:16
RX: BufferSize:16
RX inLoop: BufferSize:16
TX: BufferSize:16
TX: BufferSize:16
RX inLoop: 1
RX inLoop: Length of Input without 0: 16
RX inLoop: BufferSize:195968
RX inLoop: 0
RX inLoop: Length of Input without 0: 16
RX inLoop: BufferSize:195952