SocketTool工具(模拟开发板)和基于socket的jav

2018-07-19  本文已影响0人  27岁未成年

之前接手要写一个代码和开发板联调,一脸蒙.对我来说跟硬件一起开发真的很头疼.之前了解过一点socket没成想这次用上了

开发板想要跟后台联调不能用我们平时软件联调用的http协议,只能用TCP/IP协议或UDP/IP协议.这里用socket技术,

有关TCP/IP,UDP/IP协议等七层协议各位可以百度一下,我就不做介绍了,因为我也没搞懂.但这并不影响我开发.

第一步搭建一个Springboot项目在我简书里已经写了,地址:

https://www.jianshu.com/p/12da23fcc4c2
1.在pom.xml中加载日志Lombok依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>groupId</groupId>
    <artifactId>washCarProject</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <!--springboot的parent-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>

    </parent>
    <!--springboot的web支持-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
      

        <!--日志配置,采用这个日志不用每次都去初始化log变量-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>
      
    </dependencies>
    <build>
        <plugins>
            <!--Springboot插件-->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.invengo.washCar.WashCarApplication</mainClass>
                </configuration>
            </plugin>

        </plugins>
    </build>


</project>

2.创建一个服务器

@Slf4j
public class Server
{
    public void getServerDemo() throws Exception
    {

        ServerSocket server = new ServerSocket(8099);//设置服务器端口号
        System.out.println("服务器开启,等到客户端链接------------------   ");//服务器开启时控制台输出
        while (true) {
            Socket socket = server.accept();
            new Agent(socket).start();
        }
    }

    class Agent extends Thread
    {
        Socket socket = null;

        public Agent(Socket soc)
        {
            this.socket = soc;
        }

        public void run()
        {
            try {
                InputStream in = socket.getInputStream();
                OutputStream out = socket.getOutputStream();
                out.write("welcome to Server!\0".getBytes());//给客户端返回信息告知其链接成功
                out.flush();
                byte[] bytes = null;
                while (true){
                bytes = new byte[58];//大小可更改
                in.read(bytes);
                System.out.println("客户端来消息"+ Arrays.toString(bytes));//由于这里是跟开发板做链接所以全部都必须输入输出为二进制才可以,所以无论传输的是什么都要转换成二进制的形式      
                log.info(Arrays.toString(bytes));      //将客户的消息记录日志
                }
            } catch (Exception e) {
                System.err.println(e);//也可以写成e.printStackTrace();
            }

        }
    }
}

3.在开启类中调用Socket类

@Slf4j
@SpringBootApplication
public class SocketrApplication extends SpringBootServletInitializer
{

    public static void main(String[] args)
    {
        SpringApplication.run(SocketrApplication.class, args);
       Server server = new Server();
        try {
            server.getServerDemo();//调用开启服务器
        } catch (Exception e) {
            log.error(e.getMessage());//记录日志
//            e.printStackTrace();
        }
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
    {
        return builder.sources(this.getClass());
    }
}

4.这样可以开启程序运行一下,服务器开启,控制台输出


5.打开TPC/IP调试工具链接服务器,这个工具大家可以去网上搜,我的是我们硬件同事给我的所以没有连接


ff2.png

记得要选择TCP Client这个选项来创建客户端


ff3.png
上图可见自己的ip和服务器端口.点击连接,开始连接服务器,连接成功后可以再数据提示框看到服务器发送过来的的信息
ff6.png

这样就连接成功了
然后在数据发送框中输入测试数据点击发送


ff6.png ff7.png

发送成功会在数据提示 窗口中看到自己发送的数据
并且在服务器的控制台可以看到服务器接收到的数据


ff8.png

这样就表示连接成功了,至于开发板当中的程序是硬件同事写的所以我就不知道了,这部分调试通了后硬件同事用socket技术在他那边写好程序烧在板子上连接IP和端口就可以向服务器发送消息了.

一般这种使用情况会放在一个特定的服务器,所以需要你把项目部署在其他的服务器,那么可以有如下
首先把项目打包因为程序是简单的jar包所以


ff9.png

打包以后利用Xshell和Xftp放置在服务器的某个目录下
然后在服务器的终端里输入命令
由于我在代码中设置了其默认端口是8094,服务器端口号8095,所以首先需要确认这两个端口在你部署的服务器中没有被占用.
如果被占用则需要更改,服务器的端口在代码中更改,程序的默认在配置application.properties中更改


ff10.png

这里面把配置server.port=8094后面的端口在即改,改完后在打包

没有被占用的话就可以先用命令
cd /jar包所在目录
然后运行jar包三种方式

1.java -jar xxxx.jar    这种方式实时监控但是退出时程序自动关闭
2.java -jar xxxx.jar  &  这种方式不实时监控退出时程序不会关闭
3..java -jar xxxx.jar>socket.log & 这种方式不实时监控,日志输出到日志socket.log中可以再这里查看

查看日志的几种方式
1.cat  xxx.log 从第一行查看
2.tail -f xxx.log 最后十行实时查看,这个比较适合我们单片机这边查看调试.---------------推荐

这里如果运行java -jar xxx.jar出现问题参考链接:
https://www.jianshu.com/p/db5f7b130501
我在这里整理了我遇到的问题如果,你还有别的问题请留言提出,我们共同探讨

这里插播一个日志的配置
这里我用的配置是lombok
这里需要先安装插件(因为我这里已经安装了所以搜索有,没有的先在Browse repositories里面搜索lombok进行安装)


55.png

安装完成后重启idea然后在pom.xml中加入依赖

   <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.10</version>
            <scope>provided</scope>
        </dependency>

然后在你需要记录日志的类前加入@Slf4j
这样你在代码中就直接可以调用log不用声明变量了.

log.info(日志内容);
log.error(日志内容);
上一篇 下一篇

猜你喜欢

热点阅读