У меня проблемы с многопоточностью сокета Java, когда я сам узнаю о сокете на странице Java Oracle, после прочтения примера о сокете TCP и UDP.
Я пытаюсь использовать эти знания, чтобы написать что-то для обмена сообщениямимежду клиентом и сервером.
Но мне интересно, когда клиент отправляет сообщение на сервер с многопоточностью, и у сервера есть какое-то условие.
Пример: Когда клиент отправляет на сервер письмо A
Сервер получит и имеет условие типа
if(inputfromClient.equals("A")){
// how to make input fromClient is null after get message (inputstream) from client?
}
В приведенном выше комментарии к фрагменту кода вы можете увидеть мой вопрос, потому что после того, как клиент отправит ввод, который является A, клиент отправит следующее письмо, как Bв такой структуре:
if(inputfromClient.equals("A")){
if(inputfromClient.equals("B")){
//some condition
}
}
мой код сервера выглядит так:
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);
}
}
}
и код моего клиента:
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);
}
}
}
Большое спасибо.
Отредактировано
Хорошо, чтобы иметь смысл, как я упоминал ранее
Клиент отправляет сообщения на сервер
Клиент: onePMode
клиент: интернет
....
и сервер получает сообщения от клиента и сравнивает их
if(inputLine.equals("onePMode")){
// it will continue to compare inputline is satisfy with sub condition
if(inputLine.equals("internet"){
//do something
}
}
Отредактировано
GameHandle для обработки ввода
/*
* 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());
}
}