Java Socket编程客户端服务器通信问题

时间:2013-03-17 14:57:10

标签: java sockets

我有3个java类。 堆栈 - 实现堆栈。 Stackserver - 实现创建Stack对象并根据用户操作返回结果的服务器 StackClient - 实现发送操作请求并从服务器接收reslut的客户端。

动作是推,弹出,显示和退出。

当我输入动作时,它总是说无效操作。 任何人都可以在程序中找到错误吗?

Stack class

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 个答案:

答案 0 :(得分:5)

使用String.equals()来比较字符串,而不是==

if(action == "push")
...
else if(action == "pop")
如果两个对象是同一个实例,则

==返回true。您可以拥有两个具有相同值的不同String实例。