• 大吉大利,晚饭吃鸡!——accept关闭问题


      假期收尾了,学芽子们都军训了。一群张一山和周冬雨在校内晃晃悠悠,说起来春风十里也就军训比较有意思。对于我这种一年追一部剧的人,显然是有点对不住。在我假期任务即将圆满之际,我开始放慢脚步寻找生活的美妙时刻,因为我还是渴望休息的,开学又要有开学的事情做,午休一会都要耍上几把《绝地求生大逃杀》!因为我还没有吃到鸡!·搞计算机的不玩游戏你说你搞不搞笑。咦,其实我也有几个月没玩了哈哈。

      这个胜者吃鸡源于电影《决胜21点》中男主角在赌场常说的一句。“大吉大利,今晚吃鸡!”,而他还有一句话“我的人生观,昨天是历史,明天是个迷”我也很喜欢。

      今天我发现我的学籍异动系统表设计的不太好,为了图方便把通知书表和申请书表给捏到一起了。出了一些麻烦,在软件架构方面我还是着急了,没有好好的全方面的了解这个系统就下手实现,犯了轻敌的错误。

    可能最近我比较渴望休息,在技术方面比较浮躁,追求速度了些。反思。

      总结一下前阶段做的传感器接收程序吧。java的,socket和线程结合,http加密发送请求,流的读写和16进制字节码以及log4j等。

      我的程序角色是服务端server,传感器是客户端(每个传感器有各自端口,发送同一个端口的server)。程序启动传感器会根据ip端口连进来,我会定期像它发送16进制指令,把多参数数据读回来取平均值,检查数据是否异常,最后加密发给php网站。

      我们都知道socket的accept是阻塞的方法。如果我去控制server的开关,会有一个大麻烦,就是端口占用问题。java.net.BindException: Address already in use: JVM_Bind,一定要关闭好socketServer和socket。

     1 public static void socketServerInit(Main main){
     2         Configuration configuration = null;
     3         try {
     4             LOG.info(">>>> 服务器已启动  <<<<");
     5             ss = new ServerSocket();
     6             ss.setReuseAddress(true);
     7             ss.bind(new InetSocketAddress(Main.IpField.getText(),Integer.valueOf(Main.portField.getText())));  
     8             LOG.info(">>>> 配置成功,等待连接");
     9             while (true) // 服务器端一直监听这个端口,等待客户端的连接
    10             {
    11                 configuration=readConfig(configuration,main);
    12                 sk = ss.accept(); // 当有客户端连接时,产生阻塞
    13                 LOG.info(">>>>  获取一个连接");
    14                 saveConfigToLocal(configuration);
    15                 printBhOnView(main,sk,configuration);
    16                 LOG.info(">>>>>> 数据接收程序启动 <<<<<<");
    17                 SocketServerRun socketServerRun = new SocketServerRun();
    18                 socketServerRun.setConfiguration(configuration);
    19                 socketServerRun.setServer(ss);
    20                 socketServerRun.setSocket(sk);
    21                 Thread thread = new Thread(socketServerRun);
    22                 thread.start();
    23 //                new SocketThread(sk, configuration).start();// 新建一个socketThread处理这个客户端的socket连接
    24             }
    25         } catch (IOException ex) {
    26             ex.printStackTrace();
    27         } finally {
    28 //            try {
    29 //                if (sk != null) {
    30 //                    sk.close();
    31 //                }
    32 //                if (ss != null) {
    33 //                    ss.close();
    34 //                }
    35 //            } catch (Exception ex) {
    36 //                ex.printStackTrace();
    37 //                LOG.error(ex.getMessage());
    38 //            }
    39         }
    40     }

      但还有麻烦,我当我连接了一个传感器后开启线程去读数据了,sk = ss.accept()这个代码会再次被执行到,去等下一个传感器。这时候关闭socket的话会报错java.net.SocketException: socket closed。总之很头疼。

     在我的系统可以把它catch掉,然后不管他。但是这么做是不推荐的,等我想到解决办法再更新吧,今天先写到这接下来用到的技术我会挨篇写出。以供参考。

    附一张图下章继续讲。

      我没有每天玩喔,下了班之后还是要看王小波的书的。程序虽然很迷人,但我还有我的生活,它是我的一部分。

    今天的情诗,就来一首徐志摩的《偶然》吧。来和我大声念(带感情),预备,起。

      我是天空的一片云,

      偶尔投影在你的心波——

      你不必惊讶,

      更无需欢喜——

      在转瞬间消灭了踪影。

      你我相逢在黑夜的海上,

      你有你的,我有我的,方向;

      你记得也好,

      最好你忘掉,

      在这交会时互放的光亮!

  • 相关阅读:
    ES 遇到 unassigned shard如何处理?
    elasticsearch如何安全重启
    Agg学习笔记
    二进制文件中读写结构体
    C语言 结构体数组保存到二进制文件中
    Memcache 笔记
    memcached完全剖析–1. memcached的基础
    Redis和Memcache对比及选择
    Exploring the MapBox stack: MBTiles, TileJSON, UTFGrids and Wax
    Tilemill + tilestream + mapbox.js 自制地图
  • 原文地址:https://www.cnblogs.com/zzuuoo666/p/7448765.html
Copyright © 2020-2023  润新知