Verständnisproblem

Status
Nicht offen für weitere Antworten.

Marcel_Handball

Bekanntes Mitglied
Bei dem folgenden Programm schicke ich dem Server einen String zu, (durch das Drücken von Enter)

Nachdem es das erste mal funktioniert, wird die Funktion "senden()" zwar noch aufgerufen, aber der Server erhält keinen Nachricht. Kann mir jemand sagen warum.

Code:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

public class Server
{  
  private static void handleConnection(Socket client) throws IOException
  {
      /*BufferedWriter out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
      out.write(text);
      out.flush();*/
  }

  public static void main( String[] args ) throws IOException
  {

    ServerSocket server = new ServerSocket( 3141 );

    while(true){

        Socket client = null;
        
          try{
              client = server.accept();
              
              BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));      
              String text = in.readLine();
      
              System.out.println(text);
              
             }
          catch ( IOException e ) {
              e.printStackTrace();
          }
      finally {

      }
   }
    
}
}

Code:
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.event.*;

public class Test
{   
	static String text = null;
	static BufferedWriter out;
	static JTextArea t;

  public static void main( String[] args ) throws IOException
  {
	 JFrame f = new JFrame("Client");
	 f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	 f.setSize(400,250);
	 
	 t = new JTextArea();
	 t.addKeyListener(new KeyAdapter(){
		 public void keyReleased(KeyEvent e){
			 if(e.getKeyCode()==10){
				 try{senden();}
				 catch(IOException k){}
			 }
		 }
	 });
	 
	 f.add(t);
	 f.setVisible(true);

	 
	 Socket client = new Socket("NameDesPc's", 3141);
     out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));

     while(text!="end"){}
     
      out.close();
  }
  
  public static void senden() throws IOException{
	  out.write(t.getText());
	  out.flush();
	  t.setText("");

  }
}

Mfg Marcel
 

PrinzMartin

Aktives Mitglied
Moin Moin

Ich habs jetzt nicht getestet aber in der while schleife, wartet der Server ja, bevor der Server auf die Nachricht wartet, auf einen Client und so wie ich das mitbekommen habe (nicht zu 100% sicher) Blocked die Funktion so lange, bis ein neuer Client kommt und erst wenn das passiert wartet er auf den Input...

rufe doch mal einen zweiten Client auf dann müsste es bei dem wieder einmal gehen.......

ich hoffe daran liegt es du musst also das warten auf den Input auslagern in einen Thread soweit ich weiß
 

Dante

Bekanntes Mitglied
ja, accept() blockt solange bis eine neue Verbidnugn ankommt. Daher funktioniert die erste textausgabe, danach landet der Thread aber wieder in accept() und wartet. Jeder Client kann also genau eine Zeile Text senden.
 

Niki

Top Contributor
Wenn sich ein Client connected hat solltest du einen eigenen Thread mit diesem Client starten und dort die commands bearbeiten. Das heißt du hast für jeden verbunden Client einen eigenen "Dispatcher-Thread"
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben