近期,老师有个项目是将普通的流水线改造升级为机器人生产线。

项目需求:将生产线上机器人产生的数据上传至云服务器,手机端或电脑端通过URL(资源定位符)访问云服务器上的数据,利用数据将整个流水线的生产情况展现出来。

第一步:编写Server的程序。目的是:建立与客户端的连接,接收客户端(即流水线上的机器人设备数据)发送的数据,然后将数据存储到MySQL数据库。

第二步:利用Servlet框架编写响应请求的服务端程序。目的是:当手机端或电脑端通过URL访问云服务器时,读取数据库数据,封装成JSON格式返回给请求。

第三步:通过编写安卓程序测试。

Server程序的编写:

import java.io.IOException;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class sever {
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
         ServerSocket server = new ServerSocket(9999);    // 在9999端口上监听
            boolean flag = true;                        // 循环标记
            while (flag) {                                // 接收多个客户端请求
                Socket client = server.accept();             // 客户端连接
                new Thread(new EchoThread(client)).start();    // 创建并启动新线程
            }
            server.close();
    }
}
class EchoThread implements Runnable {                    // 建立线程类
    //公共常量
        public static final  String user = "root";  
        public static  final String password = "hsl95116";
        String data;
        String result[] =null;
    private Socket client;                                // 每个线程处理一个客户端
    public EchoThread(Socket client) {                // 创建线程对象时传递Socket
        this.client = client;
    }
    @Override
    public void run() {    
        try {
            ConnectDatabse coonect_database=  
                    new ConnectDatabse("student", user, password);//实例化连接数据库类
            coonect_database.connectdatabase();
            // 每个线程对象取得各自Socket的输入流与输出流
            Scanner scan = new Scanner(client.getInputStream());
            PrintStream out = new PrintStream(client.getOutputStream());
            scan.useDelimiter("\n");
            boolean flag = true;                     // 控制多次接收操作
            while (flag) {
                if (scan.hasNext()){                    // 是否有内容
                   String recieveData = scan.next();         // 得到客户端发送的内容
                   Pattern pattern = Pattern.compile("start(.*?)end");//
匹配的模式   
                   Matcher matchData = pattern.matcher(recieveData);
                   while(matchData.find()){   
                        data=matchData.group(1);
                       break;
                   }       
                    String regex = "\\s+";
                   try {
                       result =data.split(regex);
                       for (int x = 0; x < result.length; x++) {
                          
coonect_database.addData("class",result[x++],result[x++],result[x]);
                    }
                       if (data.equalsIgnoreCase("close")) {     // 程序结束
                          flag = false;                     // 退出循环
                       } else {                         // 应该回应输入信息
                           out.println("ECHO : " + data);
                       }
                } catch (NullPointerException e) {
                    // TODO: handle exception
                } catch (NumberFormatException e) {
                    // TODO: handle exception
                }catch (Exception e) {
                    // TODO: handle exception
 
                } finally {
                    out.println("ECHO : " + data);
                }               
                }
            }
            scan.close();
            out.close();
            client.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

下面的程序是连接MySQL数据库操作。


import java.sql.DriverManager;
import java.sql.ResultSet;
import com.mysql.jdbc.Connection;
import com.mysql.jdbc.PreparedStatement;
import com.mysql.jdbc.Statement;
 
public class ConnectDatabse {
    private String databasename;
     private String jdbcname;
     private String user;
     private String password;
     private Connection connect;
     public ConnectDatabse(String databasename,String user,String password){
         this.databasename = "jdbc:mysql://localhost:3306/"+databasename
                 +"?useUnicode=true&characterEncoding=utf-8&useSSL=false";
         this.user = user;
         this.password = password;
     }
 public void connectdatabase(){
 
      try{
          //加载MYSQL JDBC驱动程序    
          Class.forName( "com.mysql.jdbc.Driver");  
         System.out.println("Success loading Mysql Driver!");}
      catch (Exception e) {
          System.out.print("Error loading Mysql Driver!");
          e.printStackTrace();
      }
      /**
       * 连接URL为   jdbc:mysql//服务器地址/数据库名  ,
       * 后面的2个参数分别是登陆用户名和密码
       */
        try {
           connect = (Connection) DriverManager.getConnection(
                  this.databasename,user,password);
          System.out.println("连接数据库成功");          
        }
        catch (Exception e) {
          System.out.print("连接数据库失败");
          e.printStackTrace();
        }
 }
 public void queryData(String tablename){
       try {
          Statement stmt = (Statement) connect.createStatement();
          ResultSet rs = stmt.executeQuery("select * from "+tablename);//user
为你表的名称                                                      
          while (rs.next()) {
            System.out.println(rs.getString("MARRY_STATUS"));
          }
       }
      catch (Exception e) {
              System.out.print("get data error!");
              e.printStackTrace();
            }
     }
 public void addData(String tablename,String name,String address,String age)
throws Exception{                                                 
           PreparedStatement Statement=(PreparedStatement)  
                   connect.prepareStatement("INSERT INTO
"+tablename+"(name,address,age)"+" VALUES(?,?,?)");
           int data3 = Integer.parseInt(age);
                   Statement.setString(1, name);
                   Statement.setString(2, address);
                   Statement.setInt(3, data3);
                   Statement.executeUpdate();
     }


}

客户端的程序:

import java.io.IOException; 
import java.io.PrintStream;
import java.net.Socket;
import java.util.Scanner;
 
public class SocketClient {
    public static void main(String[] args) throws Exception {
        // TODO Auto-generated method stub
         Socket client = new Socket("localhost", 9999);        // 服务器地址与端口
            Scanner input = new Scanner(System.in);         // 键盘输入数据
            // 利用Scanner包装客户端输入数据(服务器端输出),PrintStream包装客户端输出数据;
            Scanner scan = new Scanner(client.getInputStream());
            PrintStream out = new PrintStream(client.getOutputStream());
            input.useDelimiter("\n");                    // 设置键盘输入分隔符
            scan.useDelimiter("\n");                    // 设置回应数据分隔符
            boolean flag = true;                        // 循环标志
            while (flag) {
                System.out.print("请输入要发送数据:");
                if (input.hasNext()) {                    // 键盘是否输入数据
                   String str = input.next().trim();    // 取得键盘输入数据
                   out.println(str);                     // 发送数据到服务器端
                   if (str.equalsIgnoreCase("byebye")) {        // 结束标记
                      flag = false;                     // 结束循环
                   }
                   if (scan.hasNext()) {                    // 服务器端有回应
                      System.out.println(scan.next());         // 输出回应数据
                   }
                }
            }
            input.close();
            scan.close();
            out.close();
            client.close();
    }


}

后续阿里云的部署待完成。

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信