V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
tctc4869
V2EX  ›  Java

一个配置了 spirng mvc 服务器的 Java web 服务器,如何与带有 gps 模块的单片机进行 socket 的通信?

  •  
  •   tctc4869 · 2019-10-17 09:18:23 +08:00 · 4808 次点击
    这是一个创建于 1625 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用的不是 spring boot,是自己搭建的 ssm 架构,我记得 spring mvc 有一个 WebSocket 的 jar 包,我百度了一下,那个 jar 包好像是专门用于浏览器与服务器之间的。

    我要用一个 4g 模块的单片机向服务器发起 tcp 通信或者 udp 通信,将位置数据发送给服务器,那个 WebSokcet.jar 包能做这些.或者有现成样例代码可以参考吗

    首先这个单片机,根据测试软件的测试结果,该单片机好像是支持 socket 服务的。

    26 条回复    2019-10-17 16:37:21 +08:00
    momocraft
        1
    momocraft  
       2019-10-17 09:19:32 +08:00
    websocket 不是浏览器专用的

    但是 socket 不是 websocket
    qping
        2
    qping  
       2019-10-17 09:23:05 +08:00
    websocket 是应用层协议,在 tcp/ip 之上,你需要的是 java socket
    tctc4869
        3
    tctc4869  
    OP
       2019-10-17 09:23:53 +08:00
    @qping 那要怎么在 Spring mvc 用 socket 的?这个我不会啊
    tanranran
        4
    tanranran  
       2019-10-17 09:25:11 +08:00
    @tctc4869 #3 #3 百度 谷歌会不会,这个和 spring 没关系
    tctc4869
        5
    tctc4869  
    OP
       2019-10-17 09:27:00 +08:00
    @qping 或者说是不是只有要在 web 程序开始的时候,加载一段服务端 socket 代码,用 white 循环死循环套住,不停的等待接收数据?
    qping
        6
    qping  
       2019-10-17 09:28:22 +08:00
    @tctc4869 #5 bingo
    tctc4869
        7
    tctc4869  
    OP
       2019-10-17 09:28:49 +08:00
    @tanranran 我目前的思路就是在 web 程序加载的时候所运行的方法里,加载一个服务端的 socket 的一段代码,并用死循环套住。这样的话,会有什么问题吗
    tctc4869
        8
    tctc4869  
    OP
       2019-10-17 09:30:25 +08:00
    @momocraft 那 websocket 能与非浏览器的应用程序或者是硬件设备进行通信吗
    misaka19000
        9
    misaka19000  
       2019-10-17 09:30:41 +08:00
    netty
    momocraft
        10
    momocraft  
       2019-10-17 09:34:27 +08:00
    如果开发者会写,能 @tctc4869
    wccc
        11
    wccc  
       2019-10-17 09:34:42 +08:00
    netty mina
    alienx717
        12
    alienx717  
       2019-10-17 09:40:15 +08:00
    利用这些 netty mina tio smart-socket 框架收发消息、暴露 tcp 端口。
    终端连接到服务端的这个端口发送报文。
    根据协议在收到消息的那个 handler 中解析。
    也可以先在 decoder 那层解析后封装到自定义的对象里面。
    lqw3030
        13
    lqw3030  
       2019-10-17 09:48:32 +08:00
    你说的 tcp 和 udp 归属传输层协议,我们 spring mvc 处理的都是应用层协议,所以你需要的应该是 netty
    knva
        14
    knva  
       2019-10-17 09:50:22 +08:00
    再起一个服务,专门用于通信, 用数据库跟 web 层交互
    yplam
        15
    yplam  
       2019-10-17 09:50:24 +08:00
    如果要自己造轮子的话就 netty

    简单的话就 mqtt
    leafre
        16
    leafre  
       2019-10-17 10:02:18 +08:00
    netty
    gz911122
        17
    gz911122  
       2019-10-17 10:06:50 +08:00
    netty 简单一些

    vertx 基于 netty 封装了一层,用起来更简单一些
    andychen20121130
        18
    andychen20121130  
       2019-10-17 11:35:23 +08:00
    websocket 协议不一样。
    netty 吧。 我有一套代码。
    opengps
        19
    opengps  
       2019-10-17 11:36:51 +08:00
    socket 服务端可以认为是独立的,不管你借助什么形式运行都可以,只是需要额外注意对外公开端口
    ESeanZ
        20
    ESeanZ  
       2019-10-17 11:46:09 +08:00
    单片机、物联网应该用 MQTT 吧。
    hugedata
        21
    hugedata  
       2019-10-17 13:36:43 +08:00
    你的 spring MVC 写一个接收 post 消息的 action,根据结果,返回 json,单片机中看你用的具体哪个系统,有没有移植好的 curl,有的话,c\C++\shell 等任意语言调用 curl 命令,没有的话,自己找该系统提供的 http 请求组件,然后用它访问你的 springMVC 的这个 action,带上 post 数据,以 post 方式提交。然后根据结果判断提交是否成功。这么简单的事情。。。。贵司就没有人能想明白吗?
    mango88
        22
    mango88  
       2019-10-17 14:00:22 +08:00
    仅仅用来上传 gps 等位置数据,服务器不需要与设备交互等需求
    不需要用到长连接通讯吧
    发起一个 http request 有啥不能解决的
    zhenjiachen
        23
    zhenjiachen  
       2019-10-17 14:09:05 +08:00
    Spring 不是有个 RSocket 吗,好像可以和 Spring MVC 一起用?
    tctc4869
        24
    tctc4869  
    OP
       2019-10-17 14:34:46 +08:00
    @hugedata 这个单片机可以发 http 请求,我一开始想用 http 的,用 at 命令可以得到 gps 数据,不过目前,只能发手动填写的数据,发不了 gps 上去。用 tcp 好像可以。
    用 http 发 gps 数据有一个问题。做不到用 at 命令进行中转,我向同事咨询过,能不能通过 c 语言中转,先发获得 gps 的 at 命令,然后通过 c 语言字符数组做到拼接得到的 gps 数据作为 http 通信请求路径的数据位,再通过 at 命令发一个 post 请求。他回答这个单片机不行。我很久没接触 c 语言了。

    这边有用单片机向 tcp 发送到其他网站测试的例子
    tctc4869
        25
    tctc4869  
    OP
       2019-10-17 14:35:27 +08:00
    @mango88 参考楼上
    hugedata
        26
    hugedata  
       2019-10-17 16:37:21 +08:00
    你的 spring MVC 写一个接收 post 消息的 action,根据结果,返回 json,单片机中看你用的具体哪个系统,有没有移植好的 curl,有的话,c\C++\shell 等任意语言调用 curl 命令,没有的话,自己找该系统提供的 http 请求组件,然后用它访问你的 springMVC 的这个 action,带上 post 数据,以 post 方式提交。然后根据结果判断提交是否成功。这么简单的事情。。。。贵司就没有人能想明白吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3702 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 10:24 · PVG 18:24 · LAX 03:24 · JFK 06:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.