JAVA TCP Socket编程 计算题
发布网友
我来回答
共2个回答
热心网友
服务器端CalculateServer.java:
package serverMole;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class CalculateServer {
public static void main(String [] args){
CalculateServer calculateServer=new CalculateServer();
try {
calculateServer.startServer();
} catch (Exception e) {
e.printStackTrace();
System.out.println("服务器出错!");
}
}
//把输入的字符串转换成float数组
public float [] convertToArray(String inputString){
String numberString=inputString.substring(inputString.indexOf('[')+1,inputString.indexOf(']'));
String [] stringArray=numberString.split(",");
float [] numberArray=new float[2];
for(int i=0;i<2;i++){
try {
numberArray[i]=Float.parseFloat(stringArray[i]);
}catch (NumberFormatException e){
System.out.println("数字错误!");
return null;
}
}
return numberArray;
}
//计算数组结果
public String getResultString(float [] numberArray){
float[] result=new float[4];
result[0]=numberArray[0]+numberArray[1];
result[1]=numberArray[0]=numberArray[1];
result[2]=numberArray[0]*numberArray[1];
result[3]=numberArray[0]/numberArray[1];
String resultString=String.format("[%1$s,%2$s,%3$s,%4$s]",result[0],result[1],result[2],result[3]);
return resultString;
}
//socketServer
public void startServer() throws Exception{
ServerSocket serverSocket= null;
PrintStream out=null;
BufferedReader in=null;
Socket socketObj=null;
try {
serverSocket = new ServerSocket(1888);
System.out.println("服务器启动...");
socketObj=serverSocket.accept();
out=new PrintStream(socketObj.getOutputStream());
in=new BufferedReader(new InputStreamReader(socketObj.getInputStream()));
} catch (IOException e) {
System.out.println("服务器启动失败!");
}
boolean flag=true;
CalculateServer cs=new CalculateServer();
try {
while (flag){
String inputString=in.readLine();
System.out.println("接收到数据:"+inputString);
if(inputString.equals("bye")){
flag=false;
continue;
}
if(inputString==null||inputString.length()<5) {
out.println("你的输入有误 !");
}else {
out.println(cs.getResultString(cs.convertToArray(inputString)));
}
}
}catch (Exception e){
out.println("数据输入有误!");
}finally {
out.close();
in.close();
socketObj.close();
serverSocket.close();
}
}
}
客户端CalculateClient.java
package clientMole;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class CalculateClient {
public static void main(String [] args){
CalculateClient calculateClient=new CalculateClient();
try {
calculateClient.startClient();
} catch (Exception e) {
System.out.println("启动失败!");
}
}
public void startClient () throws Exception{
Socket socketObj=new Socket("localhost",1888);
PrintStream out=null;
BufferedReader in=null;
out=new PrintStream(socketObj.getOutputStream());
in=new BufferedReader(new InputStreamReader(socketObj.getInputStream()));
BufferedReader localInput=null;
localInput=new BufferedReader(new InputStreamReader(System.in));
boolean flag=true;
while (flag) {
System.out.println("请输入两个数字,格式为[number1,number2],输入bye则退出:");
String inputString = localInput.readLine();
out.println(inputString);
if(inputString.equals("bye")){
flag=false;
}else{
String input=in.readLine();
System.out.println("服务器返回结果为:");
System.out.println(input);
}
}
out.close();
in.close();
localInput.close();
socketObj.close();
}
}
热心网友
按照你的要求编写的TCPClient.java TCPServer.java代码在附件中,用winrar.exe软件压缩,解压即可,先运行TCPServer程序再运行TCPClient,然后在TCPClient的text框中输入两个数之间用逗号隔开,TCPServer即可返回4.5,-1,5,4.5,0.5
追问能给个直接在cmd.exe中显示结果的代码吗