java ing印版_Java TCP实现高仿版QQ聊天(二)
前言
这是在上一篇博客基础上开展的,第一部分我们只实现了本机的聊天,无法将程序放置另外机器上和本机进行聊天。这篇博客我将介绍如何实现不同机器之间实现聊天,达到真正意义上的聊天。不过这篇博客在其他机器上面运行jar文件需要对方的电脑也要有JDK环境,才能运行jar文件。之后有时间我会说明如何打包成exe可执行文件,让没有装JDK环境的电脑也可以运行。
本文所有基础内容都会在《Java TCP实现高仿版QQ聊天(一)》中讲到,建议先行阅读上一篇文章。
效果图
我用了两台电脑实现了聊天。第一幅图是我自己的电脑,第二幅图是对方的。
服务器
由于要实现不同机器之间的聊天,那么就必须有一个“公网IP+Port”,也就是说需要有一个服务器来实现。本文所使用的服务器是老师提供的,因为不是自己的,所以在文章中涉及到服务器IP的我会隐藏掉,但我会进行详细的说明。
说了一大堆就是说自己需要有一个服务器地址,还需要设置端口号,才能实现不同机器的聊天。个人的话可以去阿里租服务器,学生的话很便宜,用来做毕业设计再好不过了。
代码变动
由于是在公网上进行聊天,之前写的博客是只在本地进行聊天,所以代码会有一部分变动,但改动的范围不大。下面将进行详细说明:
文件移动
把根目录下的db.properties(数据库配置)和MessageSound.wav(QQ信息提示音)两个文件复制至src目录下面,因为把程序导出为jar文件,jar文件中只有src下面的文件。
文件移动后,那么相应的代码也需要进行更改。需要改动的是下面几个java文件。
utils.MyTools.java
QQServerPort由6776变为你自己服务器对TCP开发的端口。我这边用的是9559端口。
QQServerIP由"127.0.0.1"(本地IP)变为服务器官网IP,由于是老师的服务器,我就不写IP地址了。
playMsgSound()方法中的
sun.audio.AudioPlayer.player.start(new sun.audio.AudioStream(new FileInputStream(new File("MessageSound.wav"))));
变为
sun.audio.AudioPlayer.player.start(new sun.audio.AudioStream(MyTools.class.getClassLoader().getResourceAsStream("MessageSound.wav")));
这个方法是实现QQ信息语音提醒的,由于文件的变动,那么代码业需要随之改变。MyTools.class.getClassLoader()的意思就是获得本类的加载器,然后获得流,最后去读取文件,功能和之前是一样的。
提醒一下:加载声音文件如果直接写的话可能会报错,下面说明如何解决。
访问限制:由于对必需的库 jre\lib\rt.jar 具有一定限制,因此无法访问类型 AudioStream。
所以需要作如下修改:右键项目–>Properties–>Java Compiler–>Errors/Warnings–>勾选“Enable project specific settings”–>Deprecated and restricted API–>将“Deprecated API”改为Warnings即可解决错误。
utils.PropertiesUtils.java
数据库配置文件位置的变动,相应的也需改动代码。
pro.load(new FileInputStream("db.properties"));
改为
pro.load(PropertiesUtils.class.getClassLoader().getResourceAsStream("db.properties"));
另外说一下:db.properties文件中的url得改为服务器中的数据库,而不是本地数据库。
view.ServerFrame.java
之前用的服务端程序时界面化的,但是在服务器上面是不可以运行界面化代码的,并且不改的话,会报错。
在ServerFrame.java文件中的main方法里面new的是界面代码,只有点击的按钮才会运行Server.java文件。所以把ServerFrame.java中的main方法中的new ServerFrame();改为new Server();,这样就是直接运行服务端了,不需要界面。
但是存在一个问题,就是当我们登录和退出的时候我们调用了ServerFrame.java文件中的showMsg()方法,所以需要把调用这个方法都注释掉。我们先把ServerFrame.java文件中的showMsg()方法注释掉,然后可以看到工作空间会有几个文件报错,我们打开着几个报错的文件,找到错误行,注释掉showMsg()方法即可。
好了,具体的代码变动已经完成。下面把程序打包成jar文件。
Export
这一步实现把程序打包为jar文件,因为我们需要把java代码部署到服务器上面,就需要这一步操作。
右键项目–>Export–>打开java文件夹–>选择Runnable JAR file–>next–>在Launch configuration中选择ServereFrame - QQ_v2–>然后导出路径可以导出到桌面,文件名为设置为server–>在Library handling中选择Package required libraries inio generated JAR–>Finish–>完成后可以看见桌面有一个server.jar文件。
上面这边操作是导出服务端的jar文件,客户端的文件也是这样导出,在Launch configuration中选择LoginFrame - QQ_v2–>然后导出路径可以导出到桌面,文件名为设置为client,然后的操作一样,可以看见桌面有了一个client.jar文件。
到这一步我们把jar文件打包完成了。下面将进行服务器的部署。
软件下载
把文件上传到服务器我们用的软件是FileZilla,将jar文件部署到服务器的文件是putty。好像现在很多人用的是Xshell,它集上传和部署于一身,不过他是收费软件,用学生的edu邮箱应该可以免费试用,我没有用过。
FileZilla
putty
打开后就会出现和Windows cmd命令符一样的界面,输入账号密码,其实这就是一个远程登录器,登录到你的服务器的Linux操作系统下面。这里的命令行就Linux操作,老师用的这个服务器是Ubuntu的。
成功登录到服务器后可以输入命令cd /usr到usr目录下,然后输入命令ls查看当前目录下的文件名,可以看到有server.jar这个文件,这个文件就是之前用FileZilla上传到服务器的。
之后我们就可以开始运行服务端了,输入命令
nohup java -jar server.jar out > /usr/wei_out_server.out 2>&1 &
这行命令的意思就是运行servere.jar文件,并且不影响命令行的运行,如果不不加nohub,就会占用命令行,不能执行其他操作,错误信息也会在命令行打印出来,out后面就是指定日志输出文件,放在usr文件下。
日志信息在FileZilla的右侧面板双击或者拖动到桌面,用记事本打开就可以查看了,如果运行出错就会在里面显示。如果日志信息为端口号,证明运行成功。一般当运行客户端的时候卡住不动,就可能是服务端出错了,这时候就需要查看日志文件看错误是什么。
运行客户端
当我们把服务端部署成功后,下面就可以运行客户端了。客户端有两种运行方式,第一种是直接在eclipse中运行Loginframe.java文件,不需要运行服务端,然后就可以实现登录了。
第二种就是运行jar文件,一般在别的机器上面运行这个程序,运行jar文件就可以了。但这种方式运行时需要对方电脑也有JDK环境才能运行成功。下次有时间讲讲这么打包成exe文件,及时对方无JDK,也可以用这个程序和你聊天。
打开cmd命令行,输入命令cd xxx,这个xxx是你桌面的路径,命令行跳转到你的桌面目录下,然后执行命令java -jar client.jar就可以成功运行客户端,登录界面就会出现。如果是服务端出错了的话,可能这边会卡住或者在命令行打印连接服务器失败。
要想在别的机器上面运行这个程序,把client.jar发给对方,然后对方执行上面的cmd命令操作就可以实现登录了。
最后就可以实现多台机器实现聊天了。
java ing印版_Java TCP实现高仿版QQ聊天(二)相关推荐
- Java TCP实现高仿版QQ聊天(二)
前言 这是在上一篇博客基础上开展的,第一部分我们只实现了本机的聊天,无法将程序放置另外机器上和本机进行聊天.这篇博客我将介绍如何实现不同机器之间实现聊天,达到真正意义上的聊天.不过这篇博客在其他机 ...
- Java TCP实现高仿版QQ聊天(一)
前言 记录一下这套简陋的系统说明,把所遇到的问题和难点以及操作说明在这篇文档中说明清楚,当个回顾吧,万一以后那一天查看也能及时找到问题.这套系统是在本人大三时期完成的,从GitHub上借鉴了很多经 ...
- java ing印版,Java中有趣的事【汇总】持续更新ing
×. 有一次,同时说看日志log的时候,发现一个方法前后两次打印同一个对象的时间log格式不一样. 当时也没在意,再一次debug查代码的时候,发现了这个问题的答案.一个时间是Timestamp(da ...
- java ing印版,Be alaways javaing...
Linux之所以受到广大计算机爱好者的喜爱,主要原因有两个,首先它是自由软件,用户不用支付费用就可以使用它,并可根据自己的需要对它进行修改.另外,它具有Unix的全部功能,任何使用Unix系统或想要学 ...
- java socket 端口复用_Java TCP/IP协议的Socket如何设置端口复用?
Java TCP/IP协议的Socket如何设置端口复用? 关注:123 答案:3 mip版 解决时间 2021-01-30 18:33 提问者情婲.毒 2021-01-29 18:58 情境如下 ...
- core java第十版_java核心技术第十版 笔记
1.java区分大小写 2.类名是以大写字母开头 (驼峰) 3.http://docs.oracle.com/javase/specs java语言规范 4. /* */ 注释不能嵌套 5. Jav ...
- java api iphone版_Java Platform, Enterprise Edition 5/6/7 API Specification
支持中文.英语.日语.韩语.法语.德语.俄语.西班牙语.葡萄牙语.藏语.西语等109种语言翻译.实景AR翻译.拍照翻译.语音翻译.对话翻译.在线翻译.离线翻译更顺畅.[权威词典]完整收录学习型牛津词典 ...
- kubernetes权威指南第五版_Java 微服务实用指南(二)
Java 微服务的部署和测试 请快速回顾一下上一篇文章开头提到的基础知识,任何服务器端的 Java 程序,都是.jar 或.war 文件,因此也包括微服务. 在 Java 生态系统(更确切地说是 JV ...
- java 点餐界面_Java小项目点餐系统(二)之服务端 | 学步园
服务端详解: 服务端的主要功能就是无限监听一个端口号,对客户端发来的连接请求给予回应,然后开辟新线程处理客户端.界面做的比较简单就是显示在线的用户,分为商家和学生. 一.监听客户端的socket连接请 ...
最新文章
- 第十六届全国大学智能车竞赛华南赛区成绩汇总
- EDM邮件群发十大技巧提升邮件群发效果
- 5 Handler与子线程
- Android 应用内微信 H5 支付
- bzoj1715[Usaco2006 Dec]Wormholes 虫洞
- 高仿精仿手机版QQ空间应用源码
- Java处理文件BOM头的方式推荐
- java 反射api_Java的反射API
- 【渝粤教育】广东开放大学 会展项目管理 形成性考核 (59)
- Codeforces Round #242 (Div. 2)C(找规律,异或运算)
- 用angular中的ng-repeat和ng-show来实现tab选项卡
- MYSQL正在使用select发现现场记录方法,包括一个逗号分隔的字符串
- 愚公移山第一章伪代码
- JavaWeb——JavaScript精讲之DOM、BOM对象与案例实战(动态添加删除表格)
- git切换远程分支并拉取最新代码
- R语言笔记:机器学习【K近邻】
- 动画:面试官问我 JS「变量提升」我头皮发麻,最后把这篇动画甩给了他
- 汉语语句的计算机分析,(计算机专业毕业论文)汉语语法自动分析.doc
- Chrome/edge inspect远程调试移动设备
- 头发合成:手绘草图妙变逼真秀发