zoukankan      html  css  js  c++  java
  • Linux 笔记 #03# 在 Debian远程服务器上运行 Java socket程序

    试图做什么:把我的 Java代码放到服务器上运行,并成功与客户端进行 socket通信

    预备环境:刚安装好 MySQL 和 JVM 的 Linux远程服务器(Debian 8.8)一台。

    主要有如下几个步骤:

    1. 将编译好的代码打包成可执行的 jar包 
    2. 在 Debian 上用 JDBC 连接 MySQL
    3. socket客户端进程连接 socket服务端进程
    4. 附加:在无图形操作系统下运行 GUI程序所抛出的异常
    5. 附加二:让程序在断开远程连接后继续运行

    1、将编译好的代码打包成可执行的 jar包 

    参考资料:[IntelliJ IDEA 2017.3 Help] Packaging a Module into a JAR File

    设置 Artifacts 有两个关键点,把程序入口写入 MANIFEST.MF 以及把编译后的代码添加进去(一定要包括依赖包,要不然丢服务器上跑会出现 ClassNotFoundException),这样才能创建可运行的 jar包。实测有效:

    2、在 Debian 上用 JDBC 连接 MySQL

    首先,需要在 Debian 上导入相关的数据库,把预先准备的 .sql 脚本通过 Xftp 传到服务器上,传输好后执行如下操作:

    readlink -f schema.sql # 取得 schema.sql 的绝对路径并复制它!
    mysql -u root -p
    source /root/schema.sql # 导入数据

     通过 netstat -tln 确认 MySQL 确实在监听 3306 端口:

    Proto Recv-Q Send-Q Local Address           Foreign Address         State      
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
    tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN  

     把 jar包传送到服务器(在这之前,请确认数据库密码是正确的!),并尝试启动它:

    java -jar main.jar
    Exception in thread "main" java.lang.UnsupportedClassVersionError: chatroom/main/ServerTest : Unsupported major.minor version 52.0
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:803)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
        at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)

     这个时候昨天写的笔记就起作用了 Linux 笔记 #02# Installing MySQL & Installing the Default JRE/JDK ,找到原来的教程安装另外一个版本的 JDK早知道这样一开始就该安装 Oracle JDK8..

    3、socket客户端进程连接 socket服务端进程

    安装好后再次运行,大功告成图:

    相应客户端:

    刚开始连了好久连不上,然后谷歌了很久“如何打开 debian xxx 端口”,最后才想起是没有添加阿里云的“安全组规则”,具体操作可以参考这个:阿里云服务器Tomcat无法从外部访问

    4、附加:在无图形操作系统下运行 GUI客户端程序所抛出的异常

    root@xkfx:~# java -jar chat.jar 
    Exception in thread "main" java.awt.HeadlessException: 
    No X11 DISPLAY variable was set, but this program performed an operation which requires it.
        at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204)
        at java.awt.Window.<init>(Window.java:536)
        at java.awt.Frame.<init>(Frame.java:420)
        at java.awt.Frame.<init>(Frame.java:385)
        at javax.swing.JFrame.<init>(JFrame.java:189)
        at chatroom.client.ui.component.impl.LoginFrame.<init>(LoginFrame.java:17)
        at chatroom.client.model.UIManager.init(UIManager.java:51)
        at chatroom.client.controller.InitializationController.main(InitializationController.java:12)

    只是有点好奇会发生什么,虽然考虑到无图形操作系统是没有提供这类接口的, 然而还是想试一下,看看会不会跑出来一个字符版的界面,结果显然是想多了。:p

    5、附加二:让程序在断开远程连接后继续运行

     参考资料一:https://www.ibm.com/developerworks/cn/linux/l-cn-screen/

    参考资料二:https://www.zhihu.com/question/20709809

  • 相关阅读:
    5 年,只为了一个更好的校验框架
    springboot 中 inputStream 神秘消失之谜
    没啥用的黑科技——自动生成测试对象信息框架
    投资中最简单的事
    一个提升英文单词拼写检测性能 1000 倍的算法?
    基于 junit5 实现 junitperf 源码分析
    关于 junit4 90% 的人都不知道的特性,详解 junitperf 的实现原理
    性能测试到底该怎么做?
    从代码生成说起,带你深入理解 mybatis generator 源码
    java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!
  • 原文地址:https://www.cnblogs.com/xkxf/p/8280878.html
Copyright © 2011-2022 走看看