TCP 소켓과 UDP 소켓에 대한 예제를 읽은 후에 Oracle Java 페이지의 소켓에 대해 스스로 배우는 동안 Java 소켓 다중 스레드에 문제가 있습니다.클라이언트와 서버 간의 Java 소켓 교환 메시지
이 지식을 사용하여 클라이언트와 서버간에 메시지를 교환하려고합니다.
그러나 클라이언트가 멀티 스레드를 사용하여 서버에 메시지를 보내고 서버에 어떤 조건이 있는지 궁금합니다.
예 : 클라이언트가 서버에
서버를 받게됩니다 편지를 보내 위 코드의 주석에서
if(inputfromClient.equals("A")){
// how to make input fromClient is null after get message (inputstream) from client?
}
같은 조건이있는 경우, 당신은 내 질문을 볼 수 있기 때문에 클라이언트 후
if(inputfromClient.equals("A")){
if(inputfromClient.equals("B")){
//some condition
}
}
내 서버 코드 같은 것입니다 : A는 입력 한 후 클라이언트가이 같은 구조에서, B처럼 다음 편지를 보낼 것입니다 전송
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
}
}
이 가능한 솔루션 가장 간단한 수 있습니다 입력을
/*
* 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());
}
}
정확히 주석의 의미는 무엇입니까이를 사용하는 방법 ? 당신이 정교 할 수 있니? 클라이언트 측에서는 루프로 작성하고 있지만 서버 측에서는 한 줄만 읽었습니다. 여기 뭔가 잘못 되었나요? – JProgrammer
@JProgrammer 예 클라이언트에 루프를 사용하여 서버에 연속적으로 메시지를 보내십시오. 하지만 서버에서이 조건이 true이면 클라이언트가 메시지를 onePMode 보낼 때와 같은 조건이 필요합니다. 서버가 위의 조건에서 다음 조건을 수행합니다. – MYE
ok.질문에 대해 더 자세히 설명 할 수 있습니까? (코드 주석에 언급 된 내용) – JProgrammer