首页 > 编程语言 >Java的多线程+Socket

Java的多线程+Socket

时间:2023-02-22 17:57:12浏览次数:35  
标签:Java Socket java new catch import 多线程 public String

客户端:

 

package com.wulala;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {
    public static void main(String[] args) {
        Client client = new Client();
        client.run();

    }

    public void run() {
        Socket client;
        try {
            client = new Socket("127.0.0.1", 9999);
            // 2.打开socket的流信息,准备下面的操作
            OutputStream os = client.getOutputStream();
            // 3.写信息
            os.write(("xxxxasdf12233").getBytes());

           }
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

 

括号可能不完整, 不重要.

客户端没啥可说的, 就是打开一个目标服务器一个IP, 跟端口, 然后outputsteam一些东西进去, 模拟回头STM32通过GPRS连接服务器后通过串口透传发送数据.

 

服务器端:

package com.wulala;

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class MultiSocketServer {
    public static void main(String args[]) {
        MultiSocketServer multiSocketServer = new MultiSocketServer();
        try {
            multiSocketServer.startServer();
        } catch (Exception ex) {

            System.out.println(ex.getMessage());
        }

    }

    public void startServer() throws IOException {
        ServerSocket ss = null;
        try {
            ss = new ServerSocket(9999);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        while (true) {
            // 1.打开socket连接
            // 等待客户端的请求
            final Socket server = ss.accept();

            System.out.println("服务-----------请求开始start");

            // 2.打开socket的流信息,准备下面的操作
            final InputStream is = server.getInputStream();
            byte b[] = new byte[1024];

            int readCount = is.read(b);

            String str = new String(b);

            str = str.trim();

            final String serverFileName = str;

            if (readCount > 0) {
                new Thread() {

                    @Override
                    public void run() {

                        System.out.println("线程" + Thread.currentThread().getName() + "启动");
                        // 3.对流信息进行读写操作
                        System.out.println("客户端传过来的信息是:" + serverFileName);

                        ExecuteDML edml = new ExecuteDML();
                        try {
                            edml.initParam("dbconfig.properties");
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        int insertResult = 0;
                        
                        String deviceID = "";
                        int activate = 0;
                        if (serverFileName.length() > 9) {
                            deviceID = serverFileName.substring(0, 8);
                            activate = Integer.valueOf(serverFileName.substring(8));
                        }
                        try {
                            //insertResult = edml.insertWXData("aaaa", 113);
                            insertResult = edml.insertWXData(deviceID, activate);
                            System.out.println("Total "+insertResult+" result been changed");
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }
                        try {
                            is.close();
                            server.close();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                        return;
                    }
                }.start();
            }

            System.out.println("服务-----------请求结束over");
        }
    }
}

简单来说, 一有数据过来, 就起一个线程, 在这个项目里面, 通常发一个字符串过来就完事, 判断字符串的前8位为设备名, 后面就是激活数.或者别的什么.

以后要进行接收数据的校验, 分析什么的, 迟点重构吧.

 

还有一个写数据库的类:

package com.wulala;

import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.util.Properties;
import java.util.UUID;

public class ExecuteDML {
    private String driver;
    private String url;
    private String user;
    private String password;

    public void initParam(String paramFile) throws Exception {
        Properties props = new Properties();
        props.load(new FileInputStream(paramFile));
        driver = props.getProperty("driverClassName");
        url = props.getProperty("url");
        user = props.getProperty("user");
        password = props.getProperty("password");

    }

    public int insertData(String data) throws Exception {
        Class.forName(driver);
        try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement()) {
            return stmt.executeUpdate("INSERT INTO MEMS_REC (ID,X,Y, CREATE_TIME) VALUES ('" + UUID.randomUUID().toString() + "','1','" + data
                    + "', now());");
        }
    }

    public int insertWXData(String deviceID,int activate) throws Exception {
        Class.forName(driver);
        try (Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement()) {
            return stmt.executeUpdate("INSERT INTO WANG_XIN (ID,DEVICE_ID,ACTIVATE) VALUES ('" + UUID.randomUUID().toString() + "','"+deviceID+"'," + activate
                    + ");");
        }
    }
    // public static void main(String[] args) throws Exception {
    //
    // ExecuteDML edml = new ExecuteDML();
    // edml.initParam("dbconfig.properties");
    // int result = edml.insertData("3");
    // System.out.println("Total " + result + " record been add");
    // }

}

标签:Java,Socket,java,new,catch,import,多线程,public,String
From: https://www.cnblogs.com/kn-zheng/p/17145323.html

相关文章

  • 解决java.lang.NoClassDefFoundError:Could not initialize class net.sf.cglib.beans
    异常描述项目引入Alibaba的EasyExcel工具,编译没有报错,在请求导出Excel文件的接口时,log异常出现以下错误java.lang.NoClassDefFoundError:Couldnotinitializeclassnet.......
  • Java常用类之Object源码分析
    一、概述理论上Object类是所有类的父类,即直接或间接的继承java.lang.Object类。由于所有的类都继承在Object类,因此省略了extendsObject关键字。Object类属于java.lang包......
  • Java 调接口类似postman用form-data方式post传输数据
    转自JavaHttpClient发送multipartform-data的Post请求  publicstaticStringgateway(Stringparam,Stringparamvalue,Stringservicename,Stringinterface_id......
  • 如何通过Java 代码设置 Word 文档页边距
    页边距是指页面的边线到文字的距离。通常可在页边距内部的可打印区域中插入文字和图形,也可以将某些项目放置在页边距区域中(如页眉、页脚和页码等)。在我们用的Word文档中,都......
  • Java培训班学什么班型比较好
    了解互联网的同学应该都知道Java软件开发是比较热门的行业,学习的人也是络绎不绝,市面上的相关培训急剧增多,随着不同机构的成立,学习方式也不在是单一化的,在各式各样的教学方......
  • Java培训班出来能找到工作吗,能否直接就业!
    Java已经是世界上非常流行的编程语言,至今已经牢牢抓住了开发市场,现在的Java开发人才的需求量逐年增加,相对来说是很好找工作的,至于“Java培训班出来能找到工作吗”的问题,还......
  • Java编写监控指标并集成Prometheus、Grafana
    一、Pushgateway1、上传pushgateway-1.4.3.linux-amd64.tar.gz至/opt/soft/下载地址:https://github.com/prometheus/pushgateway/releases/download/v1.4.3/pushgate......
  • Javascript进阶
    Javascript进阶一.变量提升看以下代码,或多或少会有些问题的.functionfn(){console.log(name);varname='大马猴';}fn()发现问题了么.这么写代码,......
  • E005Web学习笔记-JavaScript(三):BOM
    一、简单学习DOM1、控制(增删改查)HTML文档的内容; 2、代码:获取页面的标签(元素)对象Element;document.getElementById();//通过元素的ID获取元素......
  • E006Web学习笔记-JavaScript(四):DOM
    一、概述1、简介DocumentObjectModel文档对象模型;将标记语言文档的各个部分,封装为对象,可以使用这些对象,对标记语言文档进行CRUD(增删改查)的动......