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),那要怎么才能让运行在服务器上的设计软件 ...
随机推荐
- 第二十六天 蛰伏的Hibernate遇到春日的暖阳 —Spring MVC 集成Hibernate使用(一)
6月7日.晴."纷纷红紫已成尘,布谷声中夏令新. 夹路桑麻行不尽.始知身是太平人. " Hibernate和Spring的香艳相逢,不仅是Bean和Bean之间电光火 ...
- tcpdump抓包和scp导出以及wireshark查看
[命令和工具] tcpdump scp wireshark (1)tcpdump sudo tcpdump -i eth0 -w /home/tcpdump/1.pcap host 10.214.1 ...
- 自学Python2.4-基本数据类型-字典dict(objct)
Python dict方法总结 一.字典介绍 1.字典概述 ①字典是python中唯一内建的映射类型.又称关联数组或散列②映射类型对象里哈希值(键,key)和指向的对象(值,value)是一对多的的关 ...
- idea和Webstorm上使用git和github,码云
由于之前一直使用svn,现在项目使用git,顾根据网上找的学习资料,自己梳理了下,收获蛮多,这里做个记录,如果能帮助到您那是最好不过的. 1.大致步骤 使用工具:idea,github,码云 webs ...
- 实现我博客旁边的线条效果 html canvas-nest.js 源码
canvas-nest.js 这个js文件可以用来实现炫酷的线条与鼠标进行交互的功能,具体效果如图所示 js具体源码如下: /** * Copyright (c) 2016 hustcc * Lice ...
- 为什么你的Excel很丑?
欢迎大家关注微信公众号:i-analysis 老白是个较劲的人,也是个完美主义者,最近看到自己的小朋友在做数据分析的时候,Excel表格实在是离专业玩家有些距离,恰好老白最近在看一些关于表格制作的 ...
- 英式英语VS美式英语
- iOS: FFmpeg编译和使用 学习
ffmpeg是一个多平台多媒体处理工具,处理视频和音频的功能非常强大.目前在网上搜到的iOS上使用FFMPEG的资料都比较陈旧,而FFMPEG更新迭代比较快: 且网上的讲解不够详细,对于初次接触FFM ...
- bzoj 3991: [SDOI2015]寻宝游戏
Description 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有且仅有一条路径可达.游戏开始时,玩家可以任意选择一个村庄,瞬间转移到这个村庄,然后可 ...
- CentOS7.4 chrony时间同步服务器部署(替代NTPD)
Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确. 它由两个程序组成:chronyd和chronyc. chronyd是一个后台运行的守护进程,用于调整内核 ...