使用JavaSocket和ServerSocket创建计算器服务
我尝试用Java的ServerSocket和Socket类创建一个基本服务器。其思想是,客户端必须向服务器发送一个号码和一个操作,服务器只需返回结果。到目前为止,我已经完成了以下代码: 对于客户:使用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
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);
}
}
}