Socket: sporadisches Übertrag von Daten
Verfasst: Mi Sep 21, 2011 2:46 pm
Hello World,
Ich habe eine Client-Server-Kommunikation auf meinem Mac entwicklet (testhalber), die im Moment nicht mehr machen soll, als byte[] auszutauschen. Der Client steht und macht dies eigentlich auch fleißg mit diesem Code:
Aus Testzwecken lasse ich "stream" jedesmal ausgeben^^ Man weiss ja nie.
Jedenfalls empfange ich Serverseitig die Anfrage und übergebe sie an einen Thread, der diesen dann abhandelt.
Server:
soweit läuft auch alles noch gut. Der Thread hat jetzt nur die Aufgabe die Daten zu empfangen (restliche FUnktionalität entfernt, weil.... so weit komme ich gar nicht).
Ich habe schon einige Test-Sockets geschrieben und die liefen immer problemlos. Dieses hat jedoch ein mir unverständliches Verhalten. Der request enthält nur sporadisch Daten obwohl immer gleich angefragt wird. Ich habe es mehrmals wiederholt und es scheint kein Muster dahinter zu stecken, wann Daten übertragen werden und wann nicht. Die Ausgabe sieht folgendermaßen aus:
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
there is data -> size: 44
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
there is data -> size: 44
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Von all den Anfragen haben es nur zwei geschafft, die Daten korrekt zu übertragen. Woran kann das liegen? Ich dachte TCP-Sockets sind sehr übertragungssicher (anders als UDP). Kennt jemand das Problem oder hat meinen Schnipser schon entdeckt?
Ganz daneben kann der Code ja nicht sein, da immerhin ein paar durchkommen.
Vielen Dank schonmal für die Tipps!
Ich habe eine Client-Server-Kommunikation auf meinem Mac entwicklet (testhalber), die im Moment nicht mehr machen soll, als byte[] auszutauschen. Der Client steht und macht dies eigentlich auch fleißg mit diesem Code:
Code: Alles auswählen
serverSocket = new Socket("localhost", 13000);
os = serverSocket.getOutputStream();
os.write(stream);
os.flush();
Jedenfalls empfange ich Serverseitig die Anfrage und übergebe sie an einen Thread, der diesen dann abhandelt.
Server:
Code: Alles auswählen
public class SocketServer {
private static Thread t1;
private static ServerSocket serverSocket;
public static void main(String[] args) {
try {
serverSocket = new ServerSocket(13000);
} catch (IOException e1) {
e1.printStackTrace();
}
while(true){
try{
Socket clientSocket = serverSocket.accept();
System.out.println("Request detected");
t1 = new CommInterfaceServer(clientSocket);
t1.run();
}catch(Exception e){}
}
}
}
Code: Alles auswählen
public class CommInterfaceServer extends Thread {
private Socket clientSocket;
private byte[] stream;
public CommInterfaceServer(Socket clientSocket) {
this.clientSocket = clientSocket;
}
public void run() {
try {
InputStream inPut = clientSocket.getInputStream();
if (inPut.available() > 0) {
stream = new byte[inPut.available()];
inPut.read(stream);
System.out.println("there is data -> size: " + stream.length);
} else {
System.out.println("no data, u mad?");
}
clientSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
there is data -> size: 44
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
there is data -> size: 44
Request detected
no data, u mad?
Request detected
no data, u mad?
Request detected
no data, u mad?
Von all den Anfragen haben es nur zwei geschafft, die Daten korrekt zu übertragen. Woran kann das liegen? Ich dachte TCP-Sockets sind sehr übertragungssicher (anders als UDP). Kennt jemand das Problem oder hat meinen Schnipser schon entdeckt?
Ganz daneben kann der Code ja nicht sein, da immerhin ein paar durchkommen.
Vielen Dank schonmal für die Tipps!