Java socket-exchange-Nachricht zwischen client und server

Ich habe Mühe, Java socket multithread, während ich Lerne, indem ich mich über socket auf Oracles Java-Seite, nach dem Lesen der Beispiel über TCP-und UDP-socket.

Ich versuche, dieses wissen nutzen, um etwas zu schreiben zum Austausch von Nachrichten zwischen client und server.

Aber, ich Frage mich, wenn die client-Nachricht an server mit Multi-Thread -, und server hat eine Bedingung.

Beispiel: Wenn die client-senden-server einen Brief eine

Server erhalten und hat einen Zustand wie

if(inputfromClient.equals("A")){
     //how to make input fromClient is null after get message (inputstream) from client?
}

In der Kommentar-code-snippet oben, Sie können sehen, meine Frage, weil nach der client sendet Eingaben Ein, dann client senden nächsten Buchstaben wie B, in einer Struktur wie dieser:

if(inputfromClient.equals("A")){
    if(inputfromClient.equals("B")){
       //some condition
    }
}

meine server-code ist wie:

 public class TCPServerThread extends Thread{

    Socket client = null;
    BufferedReader in;
    String statusBuffer = new String();
    String intputLine, outputLine;
    public TCPServerThread(Socket socket){
        client = socket;
    }

    public void run(){
        try {
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(TCPServerThread.class.getName()).log(Level.SEVERE, null, ex);
            }
            PrintWriter out = new PrintWriter(client.getOutputStream(),true);
            in = new BufferedReader(new InputStreamReader(client.getInputStream()));
            gameHandle g = new gameHandle();
            boolean condition = true;

                while((intputLine=in.readLine()) != null){
                    outputLine = g.processInput(intputLine);
                    out.println(outputLine);
                    System.out.println(outputLine);

                }



                  out.close();
                  in.close();
                  client.close();


        } catch (IOException ex) {
            Logger.getLogger(TCPServerThread.class.getName()).log(Level.SEVERE, null, ex);
        }
    }


}

und mein client code:

  public class ClientTCP {

    public static void main(String[] args) {
        try {
            Socket socket;
            PrintWriter out = null;
            BufferedReader in = null;
            try {
                socket = new Socket("localhost", 4444);
                out = new PrintWriter(socket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            } catch (UnknownHostException ex) {
                Logger.getLogger(ClientTCP.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(ClientTCP.class.getName()).log(Level.SEVERE, null, ex);
            }

            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            String fromServer;
            String fromUser;
            fromUser = stdIn.readLine();
            while(fromUser!= null){

                out.println(fromUser);
                //System.out.println(in.readLine());
            }
        } catch (IOException ex) {
            Logger.getLogger(ClientTCP.class.getName()).log(Level.SEVERE, null, ex);
        }
   }


}

Danke Ihnen sehr.

Bearbeitet

Ok, um Sinn zu machen, als ich vor erwähnen

Clients senden Nachrichten an einen server

Client: onePMode

client: internet

....

- und server-Nachrichten von client an und vergleichen Sie es

if(inputLine.equals("onePMode")){
 //it will continue to compare inputline is satisfy with sub condition
  if(inputLine.equals("internet"){
   //do something
   }

}

Bearbeitet

GameHandle Zu Handhaben Eingang

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package srpserver;

import java.net.Socket;
import java.util.Random;

/**
 *
 * @author ***
 */
public class gameHandle {

    private String modePlay = "";
    private String wait = "wait";
    private String status = wait;
    private String keyword = "";
    private Socket client;
    private String letter = "";
    private String onePMode ="onePMode";
    private String getWord = "getWord";
    private String twoPMode = "twoPMode";
    private String waitForPlayer = "waitforPlayer";
    private String ready = "ready";
    private String question = "question";

    public gameHandle(){}

    public gameHandle(Socket socket,String Mode, String keyword, String letter){
        client = socket;
        this.keyword = keyword;
        this.letter = letter;
        modePlay = Mode;
    }
    //array with word will be rando,
    String[] words = {"laptop", "network", "device", "game", "mobile",
    "word", "november", "december", "signal", "internet","localhost","boot", "socket",
    "client", "server", " port", "exception", "java", "dotnet","singleton", "ejb","hibernate",
    "computer", "microsoft", "lan"};

    //this method get random word from array    
    public String getWord(){
        Random r = new Random();
        String randomString = words[r.nextInt(words.length)];
        return randomString;
    }



    public String processInput(String inputString){
        String outPut = "";
            if(status.equals("wait")){
                if(inputString.equals(onePMode)){
                    status = question;
                    outPut = "hello";
                   //outPut = question;
                }
            }else if(status.equals(question)){
                if(inputString.equals(getWord)){
                    /*keyword = getWord();
                    outPut = getWord();
                    System.out.println(keyword);
                    status = question;*/
                    outPut = "getworrdddrdd";
                    System.out.println("get worddddddddd");

                }else if(keyword.contains(inputString)){
                    System.out.println("containt");
                }
            }
        return outPut;
    }





    public static void main(String[] args) {
        gameHandle a = new gameHandle();
        System.out.println(a.getWord());

    }
}
  • Was ist die Bedeutung des Kommentar genau? können Sie das noch näher erläutern? Und ich sehe, dass auf client-Seite, die Sie schreiben in einer Schleife, aber bei server, die Sie Lesen, nur eine Zeile. Ist es etwas falsch hier?
  • ja ich nutze loop-client für das senden von Nachrichten kontinuierlichen zu-server aber im server-muss ich haben Zustand wie bei der client-Nachricht senden onePMode wenn diese Bedingung wahr, server nächste Bedingung in einem Zustand oben
  • ok. können Sie erläutern, mehr auf die Frage (die eine, die erwähnt wird im Kommentar im code)
  • es bedeutet, wenn Kunden eine Nachricht senden, wie "A" an den server, BufferedReader speichern Sie es, und dann setze ich inputLine zu speichern-Wert der Nachricht ("A"), wenn der client Geben Sie Einen, server die es zu erhalten und zu vergleichen, um die Bedingung und die server weiter zu tun, einem sub-Zustand innen eine wesentliche Voraussetzung, aber immer noch speichern Sie einen Buchstaben A in der variable inputLine ich will, wenn client-Typ A, server bekommen es zu vergleichen, und warten Sie für den client-Typ B zu tun, einem sub-Zustand, innen
  • "Wie stellen Sie input fromClient null ist nach Meldung bekommen (inputstream) aus": Wenn Sie diese Frage, ist es sinnlos. Es sei denn, Sie Fragen sich, wie Sie schreiben, " inputFromClient = null;', in welchem Fall es ist einfach nicht zu glauben. Ich kann nicht Kopf oder Schwanz Ihres Kommentars sofort oben.
  • Ihre Frage ist auch sinnlos, weil inputLine vielleicht nicht gleich "A" und "B" oder "onePMode" und "internet" gleichzeitig.
  • Entfernen Sie die sinnlos sleep().

InformationsquelleAutor MYE | 2012-02-25
Schreibe einen Kommentar