Announcement

Collapse
No announcement yet.

StreamReader des Socketservers

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • StreamReader des Socketservers

    Hi,

    entwickle zurzeit einen SocketServer. Als erster Schritt soll er die Empfangen Daten einfach in ein txt File und in der Konsole ablegen. Leider gibt er mir nur eine Teil der gesendeten Daten am Port aus.
    Was mache ich falsch oder wie muss ich es korrekt machen, das er alle Daten am definierten Port erfasst und ausgibt?

    Code:
    		try {
    			sock = new ServerSocket(PORT);
    			
    			while (true) {
    
    				clientSock = sock.accept();
    
    				BufferedReader in1 = new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
    				String text1 = in1.readLine();
    				System.out.println("Datastream");
    				System.out.println(text1);
    				
    				Writer fw = null; 
    				fw = new FileWriter( "SocketServer/test.txt" ); 
    				fw.write(  text1 ); 
    			  
    				  
    				fw.close();
    				in1.close();
    				
    				// Process it.
    				process(clientSock);
    	    
    		
    			}

    Gruss und vielen Dank im voraus

  • #2
    Hi Rocco1979,

    das sieht soweit OK aus (bis auf die Tatsache, dass das close() in einen finally-Block sollte). Ist denn der Server OK? Da vergisst man schnell mal ein flush() bei der Zeile.

    Grüße

    Christian | http://www.tutego.com/

    Comment


    • #3
      Habe es jetzt so gelöst:

      Code:
          try {
              sock = new ServerSocket(PORT);
                  clientSock = sock.accept();
      
                  BufferedReader in1 = new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
           
                  Writer fw = null;
                  fw = new FileWriter( "SocketServer/test.txt" );
      
              while (true) {
                  String text1 = in1.readLine();
                  if (text1 == null) break;
      
                  System.out.println("Datastream");
                  System.out.println(text1);
                  fw.write(  text1 );
              }
                  fw.close();
                  in1.close();
               
                  // Process it.
                  process(clientSock);
      aber es funktioniert nur halb und zwar:

      1.) SocketServer beendet sich automatisch nach einem Empfang
      2.) Ich sollte nach dem eingegangen Request ein Response senden. Diese Response ist aber XMF File. Wie sende ich ein Acknowledg mittels XML File an den client zurück?
      3.) Was meinst du mit finally block?


      Gruss

      Comment


      • #4
        Da close() sollte in ein finally, etwa beschrieben unter http://www.tutego.com/javabuch/javai....htm#Xxx999456. Wenn du XML hin- und hersenden möchtest, würde ich gleich mit SOAP oder REST (http://jcp.org/en/jsr/detail?id=311) beginnen. Für einen einfachen Server kannst du gerne einen Blick auf http://www.tutego.com/javabuch/javai....htm#Xxx999854 werfen, da ist das mit dem finally auch drin.

        Grüße

        Christian | http://www.tutego.com/

        Comment


        • #5
          Habe es jetzt so gemacht:

          Code:
          	            //PrintWriter out = new PrintWriter (new OutputStreamWriter (clientSock.getOutputStream ()), true);
          
          	            BufferedReader in = new BufferedReader(new InputStreamReader(clientSock.getInputStream()));
          	            PrintWriter out = new PrintWriter(new OutputStreamWriter(clientSock.getOutputStream(),"latin1"), true);
          	            
          	            Writer fw = null;
          	            fw = new FileWriter( "C:/Programme/eclipse/workspace/ServiceProvider/bin/RequestXML.xml" );
          	            
          	            	            OutputStream out1 = clientSock.getOutputStream();
          	            InputStream fileIn = new FileInputStream("C:/Programme/eclipse/workspace/ServiceProvider/bin/ResponseXML.xml");
          
          
               
          	        while (true) {
          	            String text1 = in.readLine();
          	           
          	            if (text1 == null) break;
          	            System.out.println( text1 );
          	            fw.write(  text1 );
          
          	            
          	            byte[] buffer = new byte[1024];
          	            while (fileIn.available() > 0) {
          	                out1.write(buffer, 0, fileIn.read(buffer));
          	     
          	                }
          	        }
          mit wiresshark kann ich die Netzwekkommunikation kontrollieren. Meiner Meinung nach ist es nun OK aber die Gegenstelle akzeptiert es nicht. :-(( Was mache ich falsch oder gibt es noch einen anderen weg?

          Comment

          Working...
          X