Ansics
Cadet 4th Year
- Registriert
- Mai 2003
- Beiträge
- 107
Hi,
Ich möchte gerne einen J2ME Clienten auf meinem Handy mit ner Javaanwendung auf meinem Rechner verbinden. Ich benutze Sockets um die Kommunikation zu ermöglichen.
Mein J2Me Client hat nix besonderes. Nur nen Textfeld und nen "Send"-Button. Wenn ich auf "Send" drücke, soll der Inhalt des Textfeldes an meine Javaanwendung auf dem Rechner gesendet werden, in upperCase zurückkommen und als Alert aufm Handy angezeigt werden.
Hier der Code vom J2ME Client. Der "Send"-Button ruft nur die Funktion send() auf. socket ist hier vom Typ StreamConnection und os bezeichnet einen OutputStream.
Der Code von der Javaanwendung auf meinem Rechner ist:
Wie gesagt: Das ganze Prozedere läuft genau einmal, danach passiert folgendes: Die Javaanwendung bleibt nicht mehr (wie beim ersten mal) bei in.readLine(); stehen, sondern läuft da einfach munter weiter. Normalerweise müsste die Anwendung doch da stehen bleiben. Wieso übergeht sie die Zeile ab dem zweiten mal immer?
Ich will halt, dass nur einmal ne Socketverbindung aufgebaut wird. Die Javaanwendung soll die ganze Zeit (while true) lauschen, ob vom Handy neue Nachrichten kommen. Dabei soll sie jedesmal, wenn sie zur Zeile mit in.readLine(); kommt, stehen bleiben.
Was mach ich falsch? Geht das überhaupt so wie ich mir das vorstelle, oder muss ich für jede neue Nachricht die komplette Socketverbindung neu aufbauen?
Danke für Eure Mühe!!
Ansics
Ich möchte gerne einen J2ME Clienten auf meinem Handy mit ner Javaanwendung auf meinem Rechner verbinden. Ich benutze Sockets um die Kommunikation zu ermöglichen.
Mein J2Me Client hat nix besonderes. Nur nen Textfeld und nen "Send"-Button. Wenn ich auf "Send" drücke, soll der Inhalt des Textfeldes an meine Javaanwendung auf dem Rechner gesendet werden, in upperCase zurückkommen und als Alert aufm Handy angezeigt werden.
Hier der Code vom J2ME Client. Der "Send"-Button ruft nur die Funktion send() auf. socket ist hier vom Typ StreamConnection und os bezeichnet einen OutputStream.
Code:
public void send(String message) throws IOException {
os = socket.openOutputStream();
os.write(message.getBytes());
os.close();
is = socket.openInputStream();
receive();
st.showReply(lastReceivedMessage);
}
public void receive() {
try {
int MAX_LENGTH = is.available();
byte[] buf = new byte[MAX_LENGTH];
int total = 0;
while (total < MAX_LENGTH) {
int count = is.read(buf, total, MAX_LENGTH - total);
if (count < 0) {
break;
}
total += count;
}
is.close();
lastReceivedMessage = new String(buf, 0, total);
} catch(Exception ignored) {};
}
Der Code von der Javaanwendung auf meinem Rechner ist:
Code:
try {
while (true) {
receive();
send();
}
} catch (Exception ignored) {}
private void send() {
try {
out.write(lastReceivedMessage.toUpperCase());
out.newLine();
out.flush();
} catch (Exception ignored) {}
}
private void receive() {
try {
lastReceivedMessage = in.readLine();
} catch (IOException io) {}
}
Wie gesagt: Das ganze Prozedere läuft genau einmal, danach passiert folgendes: Die Javaanwendung bleibt nicht mehr (wie beim ersten mal) bei in.readLine(); stehen, sondern läuft da einfach munter weiter. Normalerweise müsste die Anwendung doch da stehen bleiben. Wieso übergeht sie die Zeile ab dem zweiten mal immer?
Ich will halt, dass nur einmal ne Socketverbindung aufgebaut wird. Die Javaanwendung soll die ganze Zeit (while true) lauschen, ob vom Handy neue Nachrichten kommen. Dabei soll sie jedesmal, wenn sie zur Zeile mit in.readLine(); kommt, stehen bleiben.
Was mach ich falsch? Geht das überhaupt so wie ich mir das vorstelle, oder muss ich für jede neue Nachricht die komplette Socketverbindung neu aufbauen?
Danke für Eure Mühe!!
Ansics