Linux 笔记 #03# 在 Debian远程服务器上运行 Java socket程序
我试图做什么:把我的 Java代码放到服务器上运行,并成功与客户端进行 socket通信。
预备环境:刚安装好 MySQL 和 JVM 的 Linux远程服务器(Debian 8.8)一台。
主要有如下几个步骤:
- 将编译好的代码打包成可执行的
jar包 - 在 Debian 上
用 JDBC 连接 MySQL socket客户端进程连接socket服务端进程- 附加:在无图形操作系统下运行 GUI程序所抛出的异常
- 附加二:让程序在断开远程连接后继续运行
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.0.0:* LISTEN
tcp 127.0.0.1: 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
Linux 笔记 #03# 在 Debian远程服务器上运行 Java socket程序的更多相关文章
- 自动输入密码执行远程服务器上的java -version命令
自动输入密码执行远程服务器上的java -version命令 for i in $(seq 1 253);do sshpass -p "W123hz" ssh weili@192. ...
- visualvm 监控 远程 机器上的 Java 程序
JDK里面本身就带了很多的监控工具,如JConsole等. 我们今天要讲的这款工具visualvm,就是其中的一款.但是这款工具是在JDK1.6.07及以上才有的.它能够对JAVA程序的JVM堆.线程 ...
- 转:visualvm监控远程机器上的Java程序
转自:http://hanwangkun.iteye.com/blog/1195526 JDK里面本身就带了很多的监控工具,如JConsole等.我们今天要讲的这款工具visualvm,就是其中的一款 ...
- 使用pycharm调试远程服务器上的程序
一.PyCharm实现远程调试代码 1. 和远程服务器建立连接,tools àDeploymentàConfiguration 2. 点击“+”号,按照远程服务器信息配置信息 点击“Advanced ...
- scp 从远程服务器上一下载文件
scp -P202 xx3.x6.xx.xx:/usr/local/zookeeper-.zip /tmp #指定远程服务器的端口和远程服务器的目标文件 ,最后指定要下载到本的地目录 也可以从远程服务 ...
- jenkins 把包传到远程服务器上
首先我们在 一台服务器上部署svn,maven,jdk,tomcat,nexus,还有Jenkins. 这里我主要记录Jenkins. 首先我们从网上下载Jenkins的包 wget http://m ...
- 解决git pull 命令失效,不能从远程服务器上拉取代码问题
用时候在用Git pull命令的时候不管用,拉取不下来远程分支上的代码,是因为本地分支和远程分支没有建立关联. 处理这种问题很简单就按照提示执行命令即可:git branch --set-upstre ...
- 解放双手:如何在本地调试远程服务器上的Node代码
写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具.通过IDE(如vscode).通过node-inspector,三者本质上差不多.本文着重点在于介绍 如何在本地通过nod ...
- 在远程服务器上完成本地设备的程序烧写和调试(基于vivado ,SDK软件)
在使用vivado和SDK进行设计开发的时候,通常需要登录到远程服务器上进行,但是会遇到一个问题就是,所使用的开发板通常是连接在自己的电脑上(local-PC),那要怎么才能让运行在服务器上的设计软件 ...
随机推荐
- 在线安装eclipse中html/jsp/xml editor插件(很可靠)
之前有一篇文章也是安装eclipse中的web开发插件 ,可是经过非常多人使用,那种方法.不是全部人使用都能够. 接下来,找到一种很管用的方法.就是在线安装. 废话不多说,这样的方法绝对能够成功安装. ...
- 【SqlServer】【问题收集】阻止保存要求重新创建表的更改
1 概述 阻止保存要求重新创建表的更改,场景是这样的:假设数据库中有一张员工表EmployeeInfo,如下所示: 其中有个字段EmployeeBirthday,在设计表时,其类型误设为VARCH ...
- Java面向对象的特征
面向对象的特征 封装.继承.多态.(有人问第四个特征,再加抽象) 封装 体现形式(2种) 函数---提高代码的复用性 属性的私有化---将属性设置为私有的,通过提供对外的访问方法来间接操作对应属性,可 ...
- String、StringBuilder和StringBuffer类
*/ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...
- BeautifulSoup 抓取网站url
1 # -*- coding:utf-8 -*- 2 import urlparse 3 import urllib2 4 from bs4 import BeautifulSoup 5 6 url ...
- 2017年国内常用的公共NTP服务
安卓机顶盒里常用的 http://cn.pool.ntp.org CERNET 的一堆服务器就在那里面 http://asia.pool.ntp.org 追踪它的IP,台湾.韩国.日本都有. 阿里云 ...
- 【python】字典dict
- IOS学习5——属性与成员变量
[转]iOS中属性与成员变量的区别 ios中属性修饰符的作用 1. 属性用property声明 2. 简而言之,对于目前的ios开发,属性和成员变量的区别,完全可以不管. 3. 这个是历史原因造成的. ...
- rsync 指定端口拷贝
rsync -aP -e 'ssh -p 2288' ssh-audit.dat 172.18.18.31:/opt/freesvr/audit/sshgw-audit/sbin
- 搭建lnmp教程
LNMP指的是一个基于CentOS/Debian 上安装Nginx.PHP.MySQL.php.可以在独立主机上轻松的安装LNMP生产环境. 1 安装nginx 如果是一台新的服务器可直接安装(若以前 ...