2013-03-17 2 views
0

3 개의 Java 클래스가 있습니다. 스택 - 스택을 구현합니다. Stackserver - Stack 객체를 생성하고 사용자 액션을 기반으로 결과를 반환하는 서버를 구현합니다. StackClient - 작업 요청을 보내고 서버에서 다시 연결을받는 클라이언트를 구현합니다.Java 소켓 프로그래밍 클라이언트 서버 통신 문제

동작은 push, pop, display 및 exit입니다.

조치를 입력 할 때 항상 잘못된 조작이라고 표시됩니다. 누구든지 프로그램에서 오류를 찾을 수 있습니까?

Stack 클래스

public class Stack 
{ 
    private int maxSize; 
    private int[] stackArray; 
private int top,i; 

public Stack(int s) 
{ 
     maxSize = s; 
     stackArray = new int[maxSize]; 
     top = -1; 
} 

public void push(int j) 
{ 
     stackArray[++top] = j; 
} 

    public String display() 
    { 
     i=top; 
     String s=""; 
     while(i>=0) 
     { 
      s=s+" "+stackArray[i--]; 
     } 
     return s; 
    }  

public int pop() 
{ 
     return stackArray[top--]; 
} 

public int peek() 
{ 
     return stackArray[top]; 
} 

public boolean isEmpty() 
{ 
     return (top == -1); 
} 

public boolean isFull() 
{ 
     return (top == maxSize - 1); 
} 
} 

StackServer 클래스

import java.net.*; 
import java.io.*; 

public class StackServer 
{ 

ServerSocket server; 
Socket link; 
PrintWriter out; 
BufferedReader in; 

public void run() 
{ 
    try  
    { 

    System.out.println("Creating Server Socket."); 
     server = new ServerSocket(4000); 
    System.out.println("Successfully created Server Socket."); 

    Socket link; 
    System.out.println("Waiting For Connection."); 
    link = server.accept(); 
    System.out.println("Connection received from " + link.getInetAddress().getHostName()); 

    out = new PrintWriter(link.getOutputStream(),true); 
    in = new BufferedReader(new InputStreamReader(link.getInputStream()));   

    out.println("Eneter Stack Size."); 
    int size = Integer.parseInt((in.readLine()).trim()); 
    Stack stack = new Stack(size); 

    while(true) 
    { 
     String action=""; 
     int n; 

     out.println("Eneter Stack Operation."); 
     action = in.readLine(); 

     if(action == "push") 
     { 
      if(stack.isFull()) 
      { 
      out.println("Stack Full. What next?"); 
      } 
      else 
      { 
      out.println("Enter element: "); 
      n = Integer.parseInt((in.readLine()).trim()); 
      stack.push(n); 
      out.println("Pushed item. What next?"); 
      } 

     } 
     else if(action == "pop") 
     { 
      if(stack.isFull()) 
      { 
      out.println("Stack Full. What next?"); 
      } 
      else 
      { 
       n = stack.pop(); 
      out.println(n); 
      out.println("Pushed item. What next?"); 
      } 
     } 
     else if(action == "display") 
     { 
      out.println(stack.display()); 
     } 
     else if(action == "exit") 
     { 
      link.close(); 
      break; 
     } 
     else 
     { 
      out.println("Invalid Operation"); 
     } 
     } 
      } 
     catch(Exception ex) 
     { 
     System.out.println(ex); 
     } 
     } 

    public static void main(String [] args) 
    { 
    StackServer s = new StackServer(); 
    s.run();} 
    } 

StackClient 클래스

import java.net.*; 
import java.io.*; 

public class StackClient 
{ 
public static void main(String [] args) 
{ 
    try  
    { 
      Socket client; 
     System.out.println("Creating Client Socket."); 
     client = new Socket("localhost",4000); 
    System.out.println("Successfully created Client Socket."); 

    BufferedReader read = new BufferedReader(new InputStreamReader(System.in)); 
    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); 
     PrintWriter out = new PrintWriter(client.getOutputStream(),true); 
     String action =""; 
     String size,s; 

    System.out.println(in.readLine()); 
    size = read.readLine(); 
     out.println(size); 

    while(true) 
    { 

     System.out.println(in.readLine()); 
     action = read.readLine(); 
     out.println(action); 

     if(action.equals("push")) 
     { 
       System.out.println(in.readLine()); 
     s=read.readLine(); 
     System.out.println(in.readLine()); 
     } 
     else if(action == "pop") 
     { 
     System.out.println(in.readLine()); 
     } 
     else if(action == "display") 
     { 
     System.out.println(in.readLine()); 
      } 
      else if(action == "exit") 
     { 
       client.close(); 
     break; 
     } 
     else 
     { 
     out.println("Invalid Operation from Client"); 
     } 
    } 
    } 
    catch(Exception ex) 
    { 
    System.out.println(ex); 
    } 
    } 
    } 
} 
+1

'문자열'을 'equals'와 비교하십시오 : p –

+0

참조 http://stackoverflow.com/q/513832/758280 – Jeffrey

답변

5

사용 String.equals()를 비교하는 문자열,하지 == :

if(action == "push") 
... 
else if(action == "pop") 

==은 두 객체가 동일한 인스턴스 인 경우 true를 반환합니다. 동일한 값을 갖는 두 개의 서로 다른 String 인스턴스를 가질 수 있습니다.

관련 문제