基于FatJar打包jar文件,实现Socket数据通信应用

基于FatJar打包jar文件,实现Socket数据通信应用

1 服务器(Server)端代码,接收到客户端发送过来的数据保存到数据表

(1)  构建数据表操作类

package DBoperator;

import java.sql.*;

public class Comm {

      public static Connection getConnection() {

        Connection conn = null;

        try {

            String driver = "com.mysql.jdbc.Driver"; // 数据库驱动

            String url = "jdbc:MySQL://127.0.0.1:3306/ams?useUnicode=true&characterEncoding=utf-8&useSSL=true";// 数据库

            String user = "root"; // 用户名

            String password = ""; // 密码

            Class.forName(driver); // 加载数据库驱动

            if (null == conn) {

                conn = DriverManager.getConnection(url, user, password);

            }

        } catch (ClassNotFoundException e) {

            System.out.println("Sorry,can't find the Driver!");

            e.printStackTrace();

        } catch (SQLException e) {

            e.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return conn;

    }   

    /**

     * 增删改【Add、Del、Update】

     *

     * @param sql

     * @return int

     */

    public static int executeNonQuery(String sql) {

        int result = 0;

        Connection conn = null;

        Statement stmt = null;

        try {

            conn = getConnection();

            stmt = conn.createStatement();

            result = stmt.executeUpdate(sql);

        } catch (SQLException err) {

            err.printStackTrace();

            //free(null, stmt, conn);

        } finally {

            //free(null, stmt, conn);

        }

        return result;

}   

}

 

(2)  服务端接收数据线程

package server1Test1;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import java.sql.Connection;

import java.sql.SQLException;

import DBoperator.Comm;

/*

 * 服务器线程处理类

 */

public class ServerThread extends Thread {

    // 和本线程相关的Socket

    Socket socket = null;

    public ServerThread(Socket socket) {

        this.socket = socket;

    }

    //线程执行的操作,响应客户端的请求

    public void run(){

        InputStream is=null;

        InputStreamReader isr=null;

        BufferedReader br=null;

        OutputStream os=null;

        PrintWriter pw=null;

        try {

            //获取输入流,并读取客户端信息

            is = socket.getInputStream();

            isr = new InputStreamReader(is);

            br = new BufferedReader(isr);

            String info=null;

            while((info=br.readLine())!=null){//循环读取客户端的信息

                System.out.println("我是服务器,客户端说:"+info);               

                Connection conn =Comm.getConnection();

                System.out.println("资料库连线测试成功!");

                //

                String sql1="insert into t1(aa) values ('"+info+"');";       

               // System.out.println(Comm.executeNonQuery(sql1));

                //System.out.println(sql1);

                System.out.println(Comm.executeNonQuery(sql1));

                conn.close();

                System.out.println("数据插入完成!");  

            }

            socket.shutdownInput();//关闭输入流

            //获取输出流,响应客户端的请求

            os = socket.getOutputStream();

            pw = new PrintWriter(os);

            pw.write("欢迎您!");

            pw.flush();//调用flush()方法将缓冲输出

        } catch (IOException e) {

            // TODO Auto-generated catch block

            e.printStackTrace();

        } catch (SQLException e) {

                 // TODO Auto-generated catch block

                 e.printStackTrace();

           }finally{

            //关闭资源

            try {

                if(pw!=null)

                    pw.close();

                if(os!=null)

                    os.close();

                if(br!=null)

                    br.close();

                if(isr!=null)

                    isr.close();

                if(is!=null)

                    is.close();

                if(socket!=null)

                    socket.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }

}

 

(3)  主程序

package server1Test1;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

 

/*

 * 基于TCP协议的Socket通信,实现用户登陆

 * 服务器端

 */

public class Server {

    public static void main(String[] args) {

        try {

            //1.创建一个服务器端Socket,即ServerSocket,指定绑定的端口,并监听此端口

            ServerSocket serverSocket=new ServerSocket(8888);

            Socket socket=null;

            //记录客户端的数量

            int count=0;

            System.out.println("***服务器即将启动,等待客户端的连接***");

            //循环监听等待客户端的连接

            while(true){

                //调用accept()方法开始监听,等待客户端的连接

                socket=serverSocket.accept();

                //创建一个新的线程

                ServerThread serverThread=new ServerThread(socket);

                //启动线程

                serverThread.start();

 

                count++;//统计客户端的数量

                System.out.println("客户端的数量:"+count);

                InetAddress address=socket.getInetAddress();

                System.out.println("当前客户端的IP:"+address.getHostAddress());

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

 

2 客户端实现代码

package client123;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

/*

 * 客户端

 */

public class Client {

    public static void main(String[] args) {

        try {

            //1.创建客户端Socket,指定服务器地址和端口

            Socket socket=new Socket("localhost", 8888);

            //2.获取输出流,向服务器端发送信息

            OutputStream os=socket.getOutputStream();//字节输出流

            PrintWriter pw=new PrintWriter(os);//将输出流包装为打印流

            pw.write("数据1");

            pw.flush();

            socket.shutdownOutput();//关闭输出流

            //3.获取输入流,并读取服务器端的响应信息

            InputStream is=socket.getInputStream();

            BufferedReader br=new BufferedReader(new InputStreamReader(is));

            String info=null;

            while((info=br.readLine())!=null){

                System.out.println("我是客户端,服务器说:"+info);

            }

            //4.关闭资源

            br.close();

            is.close();

            pw.close();

            os.close();

            socket.close();

        } catch (UnknownHostException e) {

            e.printStackTrace();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

 

3 服务器端(客户端)打包

(1)服务器端打包:

选择Export导出项目,选择Fat Jar Exporter

 

选择项目server1

 

配置Fat Jar 插件

 

为了实现Fat Jar选择files (包含数据库jar包)

 

Jar包导出完成

 

(2)客户端打包

 

 

 

4 运行测试

 

客户端

 

posted @ 2017-05-26 09:56  jhtchina  阅读(366)  评论(0)    收藏  举报