-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1
Hi everybody,
i have written a small application which connects to tomcat, sends some data and recieves some data.
the problem i have is that tomcat suddenly sets the tcp window size to zero so that the application stopps sending data and tomcat starts sending its response before the request is finished. this only happens when sending large data (ca 90+ kb)
can somebody tell me why this is happening and how to prevent tomcat from doing that!?
Application Code ... - -------------------------
Socket ClientSocket = null; OutputStreamWriter Sender = null; InputStreamReader Reciever = null;
~ StringBuffer XMLBuffer = new StringBuffer();
try {
ClientSocket = new Socket(IPAddress, Port); Sender = new OutputStreamWriter(ClientSocket.getOutputStream()); Reciever = new InputStreamReader(ClientSocket.getInputStream());
} catch (UnknownHostException e) { System.err.println("Unknown host: " + IPAddress); } catch(IOException e){ System.err.println("IOException: " + IPAddress + " -> " + e.getMessage()); }
~ try{ ~ /*
~ POST /RPC2 HTTP/1.0 ~ User-Agent: Frontier/5.1.2 (WinNT) ~ Host: betty.userland.com ~ Content-Type: text/xml ~ Content-length: 181
~ <?xml version="1.0"?> ~ <methodCall> ~ <methodName>examples.getStateName</methodName> ~ <params> ~ <param> ~ <value><i4>41</i4></value> ~ </param> ~ </params> ~ </methodCall> ~ */ ~ /* POST */ ~ // + SourcePath + "/data/Text?id=1&edt="+id+" ~ String Message = new String(Method + " " + File +" HTTP/1.1\r\n"); ~ Sender.write(Message,0,Message.length());
~ /* HOST */ ~ Message = new String("Host: "+ IPAddress +":" + Port + "\r\n"); ~ Sender.write(Message,0,Message.length());
~ Message = new String("Content-Type: text/xml\r\n"); ~ Sender.write(Message,0,Message.length());
~ Message = new String("Transfer-Encoding: chunked\r\n"); ~ Sender.write(Message,0,Message.length());
~ Message = new String("Content-Length: "+Data.length()+"\r\n"); ~ Sender.write(Message,0,Message.length());
~ Message = new String("Connection: close\r\n\r\n"); ~ Sender.write(Message,0,Message.length());
~ System.out.println("chunked:" + 0x2000 + "\nData.length():" + Data.length());
~ if (Data.length() < 0x2000) { ~ Sender.write(Data.length()+"\r\n"); ~ Sender.write(Data,0,Data.length()); ~ Sender.write("\r\n",0,2); ~ Sender.flush(); ~ } ~ else { ~ int a; ~ for (a = 0; a < (Data.length() - 0x2000); a = a + 0x2000) { ~ Sender.write("2000\r\n"); ~ Sender.write(Data.substring(a,a+0x2000),0,0x2000); ~ Sender.write("\r\n",0,2); ~ Sender.flush(); ~ } ~ int b = (Data.length() - a); ~ System.out.println("a:" + a + "\nb:" + b + "\nData.length():" + Data.length()); ~ if (b < 0x2000) { ~ Sender.write(b + "\r\n"); ~ Sender.write(Data.substring(Data.length() - b,Data.length()),0,b); ~ Sender.write("\r\n",0,2); ~ Sender.flush(); ~ } ~ }
~ Sender.write("0",0,1); ~ Sender.write("\r\n",0,2); ~ Sender.flush();
} catch (UnknownHostException e) { System.err.println("getServer() : Unknown host: " + IPAddress); } catch(IOException e){ System.err.println("getServer() : IOException: " + IPAddress + " -> " + e.getMessage()); }
~ try {
~ int c; ~ while (Reciever.ready()) { ~ c = Reciever.read(); ~ XMLBuffer.append((char)c); ~ } ~ /*String test[]; ~ // header / body ~ test = XMLBuffer.toString().split("\r\n\r\n"); */ ~ }catch (EOFException e){ ~ }catch (Exception e) { ~ System.out.println("getServer() : Exception Cought: " + e.getMessage()); ~ return null; ~ }
~ return XMLBuffer.toString();
Tomcat Servlet Code ... - -------------------------
~ ImageData Data = new ImageData();
~ if (request.getMethod().equals("POST")) { ~ try { ~ StringBuffer Body = new StringBuffer(); ~ InputStreamReader BodyReader = new InputStreamReader(request.getInputStream());
~ int c; ~ while (BodyReader.ready()) { ~ c = BodyReader.read(); ~ Body.append((char)c); ~ }
~ Data.getDataXML(Body.toString());
~ }catch (Exception e) { ~ getLogger().writeToLog("Exception caught while reading and Parsing Body: " + e.getMessage()); ~ }
~ try{
Data.updateDataSQL(JDBCDriver,JDBCPath,JDBCUser,JDBCPasswd,Edit); ~ }catch(Exception e){ ~ getLogger().writeToLog("Database Write Statement Error: " + e.toString() + " -> " + Edit); ~ } ~ }
-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.2-rc1-SuSE (GNU/Linux)
iD8DBQFADom76KDWbLpq3loRAj3CAJ9WZEym064cGSKEnxidDg02Y9bL3wCgg58V h8/rpdJqwAI03dhGO8oCkpM= =CMkd -----END PGP SIGNATURE-----
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]