我试图做什么:把我的破代码放到服务器上运行,并成功与客户端进行 socket 通信.
预备环境:刚安装好 MySQL 和 JVM 的 Linux 远程服务器(Debian 8)一台.
主要有如下几个步骤:
将编译好的代码打包成可执行的 jar 包
在 Debian 上
用JDBC连接MySQL
socket客户端进程
连接
socket服务端进程
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 传到服务器上,传输好后执行如下操作:
通过 netstat -tln 确认 MySQL 确实在监听 3306 端口:
readlink -f schema.sql # 取得 schema.sql 的绝对路径并复制它!
mysql -u root -p
source /root/schema.sql # 导入数据
把 jar 包传送到服务器(在这之前,请确认数据库密码是正确的!),并尝试启动它:
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
(试求一下此时我的心理阴影面积)
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 无法从外部访问
来源: https://www.cnblogs.com/xkxf/p/8280878.html