Java——实现客服端和服务器计算

来源:互联网 发布:网络支付安全技术论文 编辑:程序博客网 时间:2024/06/05 12:40
这次看到以前对Socket网络编程有点弱,看完一些资料、各位网友对网络编程的相关学习,接下来我来展示一个简单的Socket网络编程——客服端向服务器发送计算表达式及服务器发送计算结果。客服端与服务器之间的相关处理步骤分为:

Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求。典型的处理步骤如下:
1. 构建一个ServerSocket实例,指定本地的端口。这个socket就是用来监听指定端口的连接请求的。
2. 调用socket的accept()方法来获得下面客户端的连接请求。通过accept()方法返回的socket实例,建立了一个和客户端的新连接。
3.首先通过DataInputStream 读取 客服端把控制台输入的计算表达式发送到服务器的数据,这是以字符串的形式发送过来的。
4.处理数据,通过String.split(“\+”) 进行相关的算木切割识别,通过类型转化。
5.通过DataOutputStream 发送计算的结果到客服端

package serverCaculClient;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.net.SocketAddress;public class Server {        // 服务器对象        private static ServerSocket serverSocket;        public static String split(String str){            String[] s;            if((s=str.split("\\+")).length>1) return String.valueOf(Integer.parseInt(s[0], 10)+Integer.parseInt(s[1], 10));            if((s=str.split("\\-")).length>1) return String.valueOf(Integer.parseInt(s[0], 10)-Integer.parseInt(s[1], 10));            if((s=str.split("\\*")).length>1) return String.valueOf(Integer.parseInt(s[0], 10)*Integer.parseInt(s[1], 10));            if((s=str.split("\\/")).length>1) return String.valueOf(Integer.parseInt(s[0], 10)/Integer.parseInt(s[1], 10));            return "The  expression is not regular";                }        public static void start() {            try {                // 定义端口                serverSocket = new ServerSocket(8888);                System.out.println("server启动...");                //客户端接入                Socket socket = serverSocket.accept();                //获取连接的客户端的SocketAddress                SocketAddress clientAddress=socket.getRemoteSocketAddress();                //打印输出连接客户端地址信息                System.out.println("Handling client at"+clientAddress);                // 读取客户端数据                    DataInputStream input = new DataInputStream(socket.getInputStream());                  String clientInputStr = input.readUTF();//这里要注意和客户端输出流的写方法对应,否则会抛 EOFException                  // 处理客户端数据                    System.out.println("客户端发过来的内容:" + clientInputStr);                    System.out.println("计算结果是:"+split(clientInputStr));//              System.out.println("数字转化成字符:"+String.valueOf(split(clientInputStr)));                // 向客户端回复信息                    DataOutputStream out = new DataOutputStream(socket.getOutputStream());                                   out.writeUTF(split(clientInputStr));                 //客户端关闭连接时,关闭连接//              System.out.println("客户端关闭连接");//              socket.close();            } catch (IOException e) {                e.printStackTrace();            }        }        public static void main(String[] args) {            new Server().start();        }}

客户端的请求过程稍微有点不一样:
1.构建Socket实例,通过指定的远程服务器地址和端口来建立连接。
2.通过Socket实例包含的DataInputStream和DataOutputStream来进行数据的读写。
3.通过new BufferedReader(newInputStreamReader(System.in)).readLine() 得到控制台输入的表达式的字符串,再通过DataOutputStream发送到服务器。
5.通过DataInputStream接受服务器的计算结果。

package serverCaculClient;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.Socket;import java.net.SocketException;import java.net.UnknownHostException;public class Client {    public static void start(){        try {            //根据服务器地址和端口号实例化一个Socket实例            Socket socket=new Socket("127.0.0.1",8888);            System.out.println("Connected to server...");            //读取服务器端数据                DataInputStream input = new DataInputStream(socket.getInputStream());                //向服务器端发送数据                DataOutputStream out = new DataOutputStream(socket.getOutputStream());                System.out.print("请输入要计算的表达式: \t");                String str = new BufferedReader(new InputStreamReader(System.in)).readLine();                out.writeUTF(str);                String ret = input.readUTF();             if(ret.equals("The  expression is not regular")){                System.out.println("The  expression is not regular");            }            else {                System.out.println("服务器端返回过来的是: " + ret);                           //关闭连接                socket.close();                System.out.println("断开连接");                }            } catch (IOException e) {            e.printStackTrace();        }    }    public static void main(String[] args) {        new Client().start();    }}

如果想要知道对Java-TCP/UDP Socket 网络编程 进一步了解,
可以参考http://shmilyaw-hotmail-com.iteye.com/blog/1556187

May-The-Good-Luck-Be-With-You

0 0
原创粉丝点击