Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaSocket和ServerSocket创建计算器服务_Java_Sockets_Serversocket - Fatal编程技术网

使用JavaSocket和ServerSocket创建计算器服务

使用JavaSocket和ServerSocket创建计算器服务,java,sockets,serversocket,Java,Sockets,Serversocket,我尝试用Java的ServerSocket和Socket类创建一个基本服务器。其思想是,客户端必须向服务器发送一个号码和一个操作,服务器只需返回结果。到目前为止,我已经完成了以下代码: 对于客户: package clientepm; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import jav

我尝试用Java的ServerSocket和Socket类创建一个基本服务器。其思想是,客户端必须向服务器发送一个号码和一个操作,服务器只需返回结果。到目前为止,我已经完成了以下代码:

对于客户:

package clientepm;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

class Stub {

    Socket s;
    ObjectInputStream ois;
    ObjectOutputStream oos;

    Stub(){
        try {
            s = new Socket("localhost", 50000);
            oos = new ObjectOutputStream(s.getOutputStream());         
            ois = new ObjectInputStream(s.getInputStream());
        } catch (IOException ex) {
            Logger.getLogger(Stub.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public double calculate(char op, int num){

        try {
            oos.writeChar(op);
            oos.writeInt(num);
            double ret = ois.readDouble();
            s.close();
            ois.close();
            oos.close();
            return ret;
        } catch (IOException ex) {
            Logger.getLogger(Stub.class.getName()).log(Level.SEVERE, null, ex);
        }
        return -1;

    }

}

package clientepm;

import java.util.logging.Level;
import java.util.logging.Logger;

public class Client extends Thread {

    Stub s;

    Client(Stub s){
        this.s = s;
    }

    @Override
    public void run(){
        int[] numbers = {12,23,35,43,55};
        char[] ops = {'M','M','Q','Q','M'};
        for (int i=0;i<5;i++){
            double result = s.calculate(ops[i], numbers[i]);
            System.out.println("Received Value " + result);
        }


    }

}



package clientepm;

public class TestClient {

    public static void main(String[] args){
        Stub b = new Stub();
        new Client(b).start();
    }

}
如您所见,当操作为“M”时,服务器应乘以x10,当操作为“Q”时,服务器应将数字平方。但是,代码不起作用


有人能帮我吗?

你能详细说明一下“不起作用”吗?你有例外吗?程序只是冻结了,什么也没有打印。你能详细说明一下“不起作用”吗?你有例外吗?程序只是冻结了,没有打印任何内容。
package servidorpm;

import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Skel extends Thread {

    Socket s;
    ObjectInputStream ois;
    ObjectOutputStream oos;

    Skel(Socket s){
        try {
            this.s=s;
            oos = new ObjectOutputStream(s.getOutputStream());
            ois = new ObjectInputStream(s.getInputStream());
        } catch (IOException ex) {
            Logger.getLogger(Skel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void run(){
        while(true){
            try {
                char op = ois.readChar();
                int num = ois.readInt();
                switch(op){
                    case 'M':
                        oos.writeDouble(num*10);
                        break;
                    case 'Q':
                        oos.writeDouble(num*num);
                        break;
                    default:
                        System.out.println("Error");
                        break;
                }

            } catch (Exception ex) {
                System.out.println("Exception");
                Logger.getLogger(Skel.class.getName()).log(Level.SEVERE, null, ex);
            }

        }

    }

}

package servidorpm;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ServerTest {

    public static void main(String[] args) {
        try {
            ServerSocket ss = new ServerSocket(50000);
            while (true) {
                Socket s = ss.accept();
                new Skel(s).start();
            }
        } catch (IOException ex) {
            Logger.getLogger(ServerTest.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}