检查输入流读取器的Java循环



我有一个服务器和client.java,可以通过输入和输出流两种方式发送和接受消息,但一旦有连接发送消息,然后服务器关闭自己,到目前为止我已经把缓冲阅读器等。在finally块中,只有当e == true (e为退出,所以我可以在我想要的时候停止它)时才激活,但它仍然在发送/接收消息后停止构建第一个问题,我怎样才能阻止它自我关闭?第二个问题我怎么能把输入流阅读器在一个循环中不断地测试从client.java输入?

Client.java

package client;
import java.io.*;
import java.net.*;
import java.io.BufferedReader;
    // Variables declaration - do not modify                     
/**
 *
 * @author ****
 */
public class Client extends javax.swing.JFrame {
;
    public Client() {
        initComponents();
    }
    private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {                                            
    jTextField1.setText("");
    input = jTextField1.getText();
    send(input);     
    }                                           
    int port = 1234;
    String hostname = "localhost";
    String input,output;
    public void send(String text) {   
    try {
         Socket skt = new Socket(hostname, port);           /*Connects to server*/
         BufferedReader in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));          /*Reads from server*/
         System.out.println("Server:" + in.readLine());
         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.println(text);                                   /*Writes to server*/
         out.close();    /*Closes all*/
         in.close();
         skt.close();
      }
      catch(Exception e) {
         System.out.print("Error Connecting to Servern");
      } 
    }
    public void startUP() {
    }
    public static void main(String args[]) {
     Client c = new Client();
     c.startUP();
     c.send("Server is online");
      new Client().setVisible(true);
   }

    // Variables declaration - do not modify                     
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   
}

Server.java

package server;
import java.io.*;
import java.net.*;
class Server {
    /*
     To send string to client use "out.print(data)"
     To use info sent from client use "in.readLine()"
     */
        int port = 1234;
    String input,output;
    boolean e = false;
    String question = "how are you";
    String answer = "i am fine";
    public void send(String text) {
        ServerSocket srvr = null;
        Socket skt = null;
         PrintWriter out = null;
         BufferedReader in = null;
    try {
         srvr = new ServerSocket(port);
         skt = srvr.accept();                       /*Waiting for Connection from client*/
         System.out.println("Connection = true");
         out = new PrintWriter(skt.getOutputStream(), true);
         out.println(text);                                                  /*Write/Send to Client*/
         in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));                   /*Read from Client*/
         System.out.println("Client:" + in.readLine());
         input = in.readLine();
      } catch( Exception e) {
         System.out.println("Error Connectingn");
      } finally {
        if(e == true){
        try {
         out.close();
         in.close();
         skt.close();               /*Closes all*/
         srvr.close();
         } catch (IOException e) {
        }
    }
    }
    }
public void testFor() {
    if(input.equals(question)){ send(answer); }
}
   public static void main(String args[]) {
       Server s = new Server();
       s.send("Client is online");  //sends a message to client
      // s.testFor();
   }
}

要开始,要停止while循环,在某些时候你必须说语句是假还是真(取决于你首先使用的是什么)。所以如果你说while(true)。这将永远是真的,因为没有什么可以比较的,因此它将创建无限循环,永远持续下去。但是如果你说我们这样做

 `while(x=true)'
  {
     x=false;
  }

这将确保您停止while循环并且不会再次进入它。如何?我们在x为真的条件下进入while循环。一旦进入循环,我们就声明x为假。因此,在下一次迭代中,x将为假,因此我们将不会进入while循环。有点直接,不是吗?
至于问题本身,我建议阅读这篇文章。它非常清晰,布局很好,它将向您展示如何编写良好的基于套接字的程序:)

第一个问题是调用缓冲区读取器、打印机等。在这些方法之外,在一个可以随时激活的单独方法中使用.close。

对于我的第二个问题,我发现我可以使用while循环:
    while(true) {
//code...
    }

谢谢大家的帮助。

最新更新