Zurück   Flashforum > Flash und Server > Coldfusion und J2EE

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 21-07-2006, 07:24   #1 (permalink)
Banned
 
Registriert seit: Jul 2006
Beiträge: 40
Socketserver in Java help on java side needed

hm, ich hoffe ich bin hier in dem forum richtig, schon seit 30 tagen kein beitrag hier

ok zur frage:

ich programmiere gerade eine socket (in java) läuft auch soweit ganz gut, einziges Problemchen ist, das sich der Server zuweilen aufhängt wenn der FLASHclient die verbindung beendet ohne die socket vorher zu closen oder das "\n\0" nicht mitgesendet wird.

sind hier leute die dergleichen schonmal gemacht haben und ähnliche Probleme kennen?
๐อ๐ ist offline   Mit Zitat antworten
Alt 21-07-2006, 07:45   #2 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
moment... ich krame grad nach der glaskugel.
unterm tisch ist sie nicht...
unterm bett ist sie nicht...
in der wasserflasche auch nicht...





...
ein wenig mehr relevanz, bitte!
wie sieht der socket aus?
wie startet der socket?
welche standardpakete hast du verwendet?

grüße
axo
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 21-07-2006, 08:11   #3 (permalink)
Banned
 
Registriert seit: Jul 2006
Beiträge: 40
java version 1.5.0.7
Code:
PHP-Code:
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;

import java.io.*;
import java.net.*;


class 
ClientWorker implements Runnable {
  private 
Socket client;
  private 
JTextArea textArea;
  
  
ClientWorker(Socket clientJTextArea textArea) {
   
this.client client;
   
this.textArea textArea;   
  }
  public 
void run(){
    
String line;
    
//String XMLline;
    
BufferedReader in null;
    
PrintWriter out null;//kill outputstream if exists as object b4
    
try{
      
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
      
out = new PrintWriter(client.getOutputStream(), true);//define  "out" as outputstreamobject
    
    
} catch (IOException e) {
      
System.out.println("in or out failed");
      
System.exit(-1);
    }

    while(
true){
      try{
        
line in.readLine();
//Send data back to client

        
if (line.trim().equals"saveFile")) { 
            
out.println(line "writing file\n\0" );
            try{
            
BufferedWriter fileOut = new BufferedWriter(new FileWriter("outfilename"));//defining fileOut as FileWriter object
            
fileOut.write("aString");
            
fileOut.close();
            } catch (
IOException e) {
                
out.println(line "can´t write file, because: "+e+"\n\0" );
            }
            
textArea.append(line);
       } else {
           
out.println(line "_\n\0" );
         
textArea.append(line);
        }
       } catch (
IOException e) {
         
System.out.println("Read failed");
         
System.exit(-1);
       }
    }
  }
}

class 
SocketThrdServer extends JFrame{

   
JLabel label = new JLabel("Text received over socket:");
   
JPanel panel;
   
JTextArea textArea = new JTextArea();
   
ServerSocket server null;

   
SocketThrdServer(){ //Begin Constructor
     
panel = new JPanel();
     
panel.setLayout(new BorderLayout());
     
panel.setBackground(Color.white);
     
getContentPane().add(panel);
     
panel.add("North"label);
     
panel.add("Center"textArea);
   } 
//End Constructor

  
public void listenSocket(){
    try{
      
server = new ServerSocket(4444); 
    } catch (
IOException e) {
      
System.out.println("Could not listen on port 4444");
      
System.exit(-1);
    }
    while(
true){
      
ClientWorker w;
      try{
        
= new ClientWorker(server.accept(), textArea);
        
Thread t = new Thread(w);
        
t.start();
      } catch (
IOException e) {
        
System.out.println("Accept failed: 4444");
        
System.exit(-1);
      }
    }
  }

  protected 
void finalize(){
//Objects created in run method are finalized when 
//program terminates and thread exits
     
try{
        
server.close();
    } catch (
IOException e) {
        
System.out.println("Could not close socket");
        
System.exit(-1);
    }
  }

  public static 
void main(String[] args){
        
SocketThrdServer frame = new SocketThrdServer();
    
frame.setTitle("Server Program");
        
WindowListener l = new WindowAdapter() {
                public 
void windowClosing(WindowEvent e) {
                        
System.exit(0);
                }
        };
        
frame.addWindowListener(l);
        
frame.pack();
        
frame.setVisible(true);
        
frame.listenSocket();
  }

hatte ich von der sun seite ist ein multithreaded server.

wie gesagt der server hängt sich zwar nicht immer aber fast immer dann auf wenn ich kein "\n\0" in flash anhänge oder den client einfach zu mache ohne die socket in flash zu closen, eigentlich sollte er sich dann einfch beenden.

Geändert von ๐อ๐ (21-07-2006 um 08:13 Uhr)
๐อ๐ ist offline   Mit Zitat antworten
Alt 21-07-2006, 08:38   #4 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Definier mal auf hängen, mit readline liest der Server nur eine Zeile, dh wenn du eine Zeile die so aussieht schickst: "horst\nWald" liest er nur horst und ist fertig
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!
Samuel ist offline   Mit Zitat antworten
Alt 21-07-2006, 09:37   #5 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
du solltest evtl. bei in.readLine() die antwortzeit überprüfen... wenn innerhalb von x sekunden keine antwort oder keine client-aktion erfolgt, kannst du schließen. sonst hast du mit der zeit lauter offene verbindungen.
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Alt 21-07-2006, 09:41   #6 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Axo, was hast du gegen persistente Verbindungen?
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!
Samuel ist offline   Mit Zitat antworten
Alt 21-07-2006, 09:53   #7 (permalink)
Banned
 
Registriert seit: Jul 2006
Beiträge: 40
@Samuel
also was ich mit aufhänge meine:

ich starte den server, dann starte ich den FLASHclient welcher sich automatisch verbindet und das Komando "saveFile" sendet (ist ein "testaufbau") ich schliesse den client aber die verbindung zum server bricht nicht ab also hab ich schonmal eine tote leitung aber das meine ich noch nicht einmal mit "aufhängen", nein schliesse ich den client einfach "steht" der socket server das heisst die JTextArea wird weiss ich kann die anwendung weder schliessen noch reagiert sie auf einen anderen client.

das selbe problem tritt auf wenn ich kein "\n\0" anhänge um den stream zu beenden , eine nachricht wird empfangen und das wars dann kein weiteres ansprechen mehr möglich.

@ rechtschreibfan, du meinst einen timeout? ,könnte ich machen aber das ist ja weniger das problem eigentlich sollte der server selbst bei einem endlangen stream auf weitere clients "horchen" und ggf. einen neuen thread erstellen.


edit. oder meintest du eine art stream input kontrolle? die die verbindung schliesst wenn der client einen "leeren" stream sendet?

Geändert von ๐อ๐ (21-07-2006 um 09:56 Uhr)
๐อ๐ ist offline   Mit Zitat antworten
Alt 21-07-2006, 09:56   #8 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Ja ist doch klar, ohne ein Linebreak lautscht der Server auf dem Port immernoch, weil er noch Daten erwartet.

Ansonsten würd ich vielleicht einen Thread laufen lassen, der die Verbindungen anpingt und guckt, ob eine Exception geworfen wird, wenn ja, wird der thread samt Connection terminiert
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!
Samuel ist offline   Mit Zitat antworten
Alt 21-07-2006, 10:53   #9 (permalink)
Banned
 
Registriert seit: Jul 2006
Beiträge: 40
jap und da ist das problem er lauscht auf dem einen stream und hängt sich dann auf.

übrigens nachdem ich ihn jetzt mal 1 minute lang hab "hängen lassen" spuckte mit eclipse denhier aus:

Zitat:
Exception in thread "Thread-2" java.lang.NullPointerException
at ClientWorker.run(SocketThrdServer.java:42)
at java.lang.Thread.run(Unknown Source)
hervorgerufen durch einfaches schliessen des client...

das mit dem thread ist eigentlich ne gute idee ich schau mal was ich da so finde
๐อ๐ ist offline   Mit Zitat antworten
Alt 21-07-2006, 10:53   #10 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Naja, Exceptionhandling ist A und O bei sowas
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!
Samuel ist offline   Mit Zitat antworten
Alt 21-07-2006, 11:09   #11 (permalink)
Banned
 
Registriert seit: Jul 2006
Beiträge: 40
schon klar nur die java dokumentation ist etwas verfahrenener als die von anderen Sprachen und mir zumindets als anfänger unübersichtlich aber egal, hast du nen link über exceptions, welche es gibt und welche wofür zuständig sind?.

was mir gerade noch aufgefallen ist ich hab mal ein wenig rumproiert, so also beim schliessen des clients empfange ich kurze zeit drauf ein zeichen, was mir in der console als 4 eckiges kästchen ausgegeben wird kopieren kann ichs leider nicht.

und ich habe auh festgestellt das der server funktioniert sobald ich den client wieder anmelde ich bekomme zwar dann die selbe fehlermeldung wie oben aber ohne auswirkungen.


wie bekomme ich in java den ascii code eines strings? escape kenn java ja nicht.
๐อ๐ ist offline   Mit Zitat antworten
Alt 21-07-2006, 11:11   #12 (permalink)
Affine Abbildung
 
Benutzerbild von Samuel
 
Registriert seit: Feb 2002
Ort: Bremen
Beiträge: 15.089
Benutze Eclipse für Java, das hilft einem wesendlich, dort werden dir auch ne Menge Sachen abgenomen, ansonsten findest du alle Esceptions die vom jeweiligen Objekt geworfen werden in der API, man muss sich früher oder später dran gewöhnen

Zum Ascii problem -> google, weiß es gerade selber nicht mehr
__________________
Solange sich auch nur einer an ihn erinnert, solange auch nur ein Herz mit Leidenschaft schlägt - wie kann ein Traum da sterben?

If you use the wrong line ending characters when writing your files, you might find that other applications that open those files will "look funny". - PHP.net

Hier ruhn meine Gebeine - ich wollt, es wären Deine.

Try to look unimportant, they may be low on ammo!

Was ist euer Lieblings-Datentyp? Schreibt mir!
Samuel ist offline   Mit Zitat antworten
Alt 21-07-2006, 13:37   #13 (permalink)
Banned
 
Registriert seit: Jul 2006
Beiträge: 40
hm hab das problem fast gelöst

eine frage noch wie terminiere ich den thread für den client?

wenn ich

PHP-Code:
in.close(); 
beschwehrt er sich über den token "." denn er erwartet ein ;

oder erklärt mir das es da ein uhandelt IOEXception gäbe aber gerade diese exceptions fang ich alle ab.
๐อ๐ ist offline   Mit Zitat antworten
Alt 21-07-2006, 15:41   #14 (permalink)
Banned
 
Registriert seit: Jul 2006
Beiträge: 40
soo problem ist gelöst, meine fresse sind einfache sachen in java schwierig
๐อ๐ ist offline   Mit Zitat antworten
Alt 21-07-2006, 16:53   #15 (permalink)
schnarchnase
 
Registriert seit: Jan 2002
Ort: konstanz
Beiträge: 2.953
Zitat:
Zitat von ๐อ๐
soo problem ist gelöst, meine fresse sind einfache sachen in java schwierig
dafür sind die schwierigen sachen in java auch schwierig ...

ne, /me java pussy.

grüße
axo
__________________

perlen vor die säue.
rechtschreibfan ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 20:51 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele