Ik wil via een MIDlet communiceren met een server. Om het portable te maken ben ik toegwezen op de HttpConnection-interface omdat deze minimaal in elke MIDP implementatie zit. Om het dataverkeer tot een minimum te beperken wil ik het verzenden van http-headers beperken.
Door testen met een eigen-geschreven-server ben ik erachter gekomen dat je voor de reactie van server naar client (MIDP enabled device) iig wel de juiste http-headers moet gebruiken omdat de client het anders niet kan verwerken
Daar valt dus weinig op te besparen.
Aangezien de server van eigen hand is ben ik dus voor het verkeer van client naar server niet afhankelijk van http-headers. Echter zorgt de HttpConnection-interface er automagisch voor dat er bij een request toch headers mee worden gestuurd
Nou vroeg ik me af of het mogelijk zou zijn om die maar 1 keer te laten verzenden om vervolgens data naar de server te sturen zonder die headers. Of zou het zelfs mogelijk zijn om het versturen van die headers uit te zetten? (wat btw me sterk lijkt)
Hieronder wat testcode die een request verstuurd en een reactie daarop van de server verwerkt. Dit werkt prima. Als ik nu echter na het gebruik van de InputStream opnieuw een request wil versturen mbv de OutputStream krijg ik een fout: "connection already open". Dit zou er op kunnen wijzen dat een request-response model zoals ik die zou willen toepassen niet mogelijk is. Dit weet ik echter niet zeker. Zou iemand een licht in de duisternis kunnen schijnen?
Door testen met een eigen-geschreven-server ben ik erachter gekomen dat je voor de reactie van server naar client (MIDP enabled device) iig wel de juiste http-headers moet gebruiken omdat de client het anders niet kan verwerken
Aangezien de server van eigen hand is ben ik dus voor het verkeer van client naar server niet afhankelijk van http-headers. Echter zorgt de HttpConnection-interface er automagisch voor dat er bij een request toch headers mee worden gestuurd
Nou vroeg ik me af of het mogelijk zou zijn om die maar 1 keer te laten verzenden om vervolgens data naar de server te sturen zonder die headers. Of zou het zelfs mogelijk zijn om het versturen van die headers uit te zetten? (wat btw me sterk lijkt)
Hieronder wat testcode die een request verstuurd en een reactie daarop van de server verwerkt. Dit werkt prima. Als ik nu echter na het gebruik van de InputStream opnieuw een request wil versturen mbv de OutputStream krijg ik een fout: "connection already open". Dit zou er op kunnen wijzen dat een request-response model zoals ik die zou willen toepassen niet mogelijk is. Dit weet ik echter niet zeker. Zou iemand een licht in de duisternis kunnen schijnen?
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
| package TestMIDlet; import javax.microedition.midlet.*; import javax.microedition.lcdui.*; //Nodig om netwerkverbindingen te maken import java.io.*; import javax.microedition.io.*; public class TestSuiteMIDlet extends javax.microedition.midlet.MIDlet { HttpConnection m_Con = null; OutputStream m_Os = null; InputStream m_Is = null; Display m_Display = null; TextBox m_Tb = null; StringBuffer m_Buff = new StringBuffer(); String m_Url = "http://localhost:9999"; int i = 0; public TestSuiteMIDlet(){ m_Display = Display.getDisplay(this); } public void startApp() { m_Tb = new TextBox("TestMIDlet", "Opening conn...\n", 1024, 0); m_Display.setCurrent(m_Tb); try{ m_Con = (HttpConnection)Connector.open(m_Url); m_Os = m_Con.openOutputStream();//tijdens deze aanroep vind de daadwerkelijke connect() plaats i = m_Tb.size(); m_Tb.insert("Connected!\n", i); //versturen request 1 m_Os.write("request1".getBytes()); m_Os.flush(); //ontvangen en verwerken response server m_Is = m_Con.openInputStream(); int ch; while ((ch = m_Is.read()) != -1){ m_Buff.append((char) ch); } i = m_Tb.size(); m_Tb.insert(m_Buff.toString(), i); //Nog een request na gebruik Inputstream, geeft een Exception :( //m_Os.write("request2".getBytes()); //m_Os.flush(); } catch(IOException e){ i = m_Tb.size(); m_Tb.insert(e.toString(), i); } } public void pauseApp() { } public void destroyApp(boolean unconditional) { } } |