日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java TCP实现高仿版QQ聊天(二)

發(fā)布時(shí)間:2023/12/29 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java TCP实现高仿版QQ聊天(二) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

? 這是在上一篇博客基礎(chǔ)上開展的,第一部分我們只實(shí)現(xiàn)了本機(jī)的聊天,無法將程序放置另外機(jī)器上和本機(jī)進(jìn)行聊天。這篇博客我將介紹如何實(shí)現(xiàn)不同機(jī)器之間實(shí)現(xiàn)聊天,達(dá)到真正意義上的聊天。不過這篇博客在其他機(jī)器上面運(yùn)行jar文件需要對方的電腦也要有JDK環(huán)境,才能運(yùn)行jar文件。之后有時(shí)間我會說明如何打包成exe可執(zhí)行文件,讓沒有裝JDK環(huán)境的電腦也可以運(yùn)行。

? 本文所有基礎(chǔ)內(nèi)容都會在《Java TCP實(shí)現(xiàn)高仿版QQ聊天(一)》中講到,建議先行閱讀上一篇文章。

效果圖

? 我用了兩臺電腦實(shí)現(xiàn)了聊天。第一幅圖是我自己的電腦,第二幅圖是對方的。

服務(wù)器

? 由于要實(shí)現(xiàn)不同機(jī)器之間的聊天,那么就必須有一個(gè)“公網(wǎng)IP+Port”,也就是說需要有一個(gè)服務(wù)器來實(shí)現(xiàn)。本文所使用的服務(wù)器是老師提供的,因?yàn)椴皇亲约旱?#xff0c;所以在文章中涉及到服務(wù)器IP的我會隱藏掉,但我會進(jìn)行詳細(xì)的說明。

? 說了一大堆就是說自己需要有一個(gè)服務(wù)器地址,還需要設(shè)置端口號,才能實(shí)現(xiàn)不同機(jī)器的聊天。個(gè)人的話可以去阿里租服務(wù)器,學(xué)生的話很便宜,用來做畢業(yè)設(shè)計(jì)再好不過了。

代碼變動(dòng)

? 由于是在公網(wǎng)上進(jìn)行聊天,之前寫的博客是只在本地進(jìn)行聊天,所以代碼會有一部分變動(dòng),但改動(dòng)的范圍不大。下面將進(jìn)行詳細(xì)說明:

文件移動(dòng)

? 把根目錄下的db.properties(數(shù)據(jù)庫配置)和MessageSound.wav(QQ信息提示音)兩個(gè)文件復(fù)制至src目錄下面,因?yàn)榘殉绦驅(qū)С鰹閖ar文件,jar文件中只有src下面的文件。

? 文件移動(dòng)后,那么相應(yīng)的代碼也需要進(jìn)行更改。需要改動(dòng)的是下面幾個(gè)java文件。

utils.MyTools.java

? QQServerPort由6776變?yōu)槟阕约悍?wù)器對TCP開發(fā)的端口。我這邊用的是9559端口。

? QQServerIP由"127.0.0.1"(本地IP)變?yōu)榉?wù)器官網(wǎng)IP,由于是老師的服務(wù)器,我就不寫IP地址了。

? playMsgSound()方法中的

sun.audio.AudioPlayer.player.start(new sun.audio.AudioStream(new FileInputStream(new File("MessageSound.wav"))));

? 變?yōu)?/p> sun.audio.AudioPlayer.player.start(new sun.audio.AudioStream(MyTools.class.getClassLoader().getResourceAsStream("MessageSound.wav")));

? 這個(gè)方法是實(shí)現(xiàn)QQ信息語音提醒的,由于文件的變動(dòng),那么代碼業(yè)需要隨之改變。MyTools.class.getClassLoader()的意思就是獲得本類的加載器,然后獲得流,最后去讀取文件,功能和之前是一樣的。

? 提醒一下:加載聲音文件如果直接寫的話可能會報(bào)錯(cuò),下面說明如何解決。

? 訪問限制:由于對必需的庫 jre\lib\rt.jar 具有一定限制,因此無法訪問類型 AudioStream。

? 所以需要作如下修改:右鍵項(xiàng)目–>Properties–>Java Compiler–>Errors/Warnings–>勾選“Enable project specific settings”–>Deprecated and restricted API–>將“Deprecated API”改為Warnings即可解決錯(cuò)誤。

utils.PropertiesUtils.java

? 數(shù)據(jù)庫配置文件位置的變動(dòng),相應(yīng)的也需改動(dòng)代碼。

pro.load(new FileInputStream("db.properties"));

? 改為

pro.load(PropertiesUtils.class.getClassLoader().getResourceAsStream("db.properties"));

? 另外說一下:db.properties文件中的url得改為服務(wù)器中的數(shù)據(jù)庫,而不是本地?cái)?shù)據(jù)庫。

view.ServerFrame.java

? 之前用的服務(wù)端程序時(shí)界面化的,但是在服務(wù)器上面是不可以運(yùn)行界面化代碼的,并且不改的話,會報(bào)錯(cuò)。

? 在ServerFrame.java文件中的main方法里面new的是界面代碼,只有點(diǎn)擊的按鈕才會運(yùn)行Server.java文件。所以把ServerFrame.java中的main方法中的new ServerFrame();改為new Server();,這樣就是直接運(yùn)行服務(wù)端了,不需要界面。

? 但是存在一個(gè)問題,就是當(dāng)我們登錄和退出的時(shí)候我們調(diào)用了ServerFrame.java文件中的showMsg()方法,所以需要把調(diào)用這個(gè)方法都注釋掉。我們先把ServerFrame.java文件中的showMsg()方法注釋掉,然后可以看到工作空間會有幾個(gè)文件報(bào)錯(cuò),我們打開著幾個(gè)報(bào)錯(cuò)的文件,找到錯(cuò)誤行,注釋掉showMsg()方法即可。

? 好了,具體的代碼變動(dòng)已經(jīng)完成。下面把程序打包成jar文件。

Export

? 這一步實(shí)現(xiàn)把程序打包為jar文件,因?yàn)槲覀冃枰裫ava代碼部署到服務(wù)器上面,就需要這一步操作。

? 右鍵項(xiàng)目–>Export–>打開java文件夾–>選擇Runnable JAR file–>next–>在Launch configuration中選擇ServereFrame - QQ_v2–>然后導(dǎo)出路徑可以導(dǎo)出到桌面,文件名為設(shè)置為server–>在Library handling中選擇Package required libraries inio generated JAR–>Finish–>完成后可以看見桌面有一個(gè)server.jar文件。

? 上面這邊操作是導(dǎo)出服務(wù)端的jar文件,客戶端的文件也是這樣導(dǎo)出,在Launch configuration中選擇LoginFrame - QQ_v2–>然后導(dǎo)出路徑可以導(dǎo)出到桌面,文件名為設(shè)置為client,然后的操作一樣,可以看見桌面有了一個(gè)client.jar文件。

? 到這一步我們把jar文件打包完成了。下面將進(jìn)行服務(wù)器的部署。

軟件下載

? 把文件上傳到服務(wù)器我們用的軟件是FileZilla,將jar文件部署到服務(wù)器的文件是putty。好像現(xiàn)在很多人用的是Xshell,它集上傳和部署于一身,不過他是收費(fèi)軟件,用學(xué)生的edu郵箱應(yīng)該可以免費(fèi)試用,我沒有用過。

FileZilla

putty

? 打開后就會出現(xiàn)和Windows cmd命令符一樣的界面,輸入賬號密碼,其實(shí)這就是一個(gè)遠(yuǎn)程登錄器,登錄到你的服務(wù)器的Linux操作系統(tǒng)下面。這里的命令行就Linux操作,老師用的這個(gè)服務(wù)器是Ubuntu的。

? 成功登錄到服務(wù)器后可以輸入命令cd /usr到usr目錄下,然后輸入命令ls查看當(dāng)前目錄下的文件名,可以看到有server.jar這個(gè)文件,這個(gè)文件就是之前用FileZilla上傳到服務(wù)器的。

? 之后我們就可以開始運(yùn)行服務(wù)端了,輸入命令

nohup java -jar server.jar out > /usr/wei_out_server.out 2>&1 &

? 這行命令的意思就是運(yùn)行servere.jar文件,并且不影響命令行的運(yùn)行,如果不不加nohub,就會占用命令行,不能執(zhí)行其他操作,錯(cuò)誤信息也會在命令行打印出來,out后面就是指定日志輸出文件,放在usr文件下。

? 日志信息在FileZilla的右側(cè)面板雙擊或者拖動(dòng)到桌面,用記事本打開就可以查看了,如果運(yùn)行出錯(cuò)就會在里面顯示。如果日志信息為端口號,證明運(yùn)行成功。一般當(dāng)運(yùn)行客戶端的時(shí)候卡住不動(dòng),就可能是服務(wù)端出錯(cuò)了,這時(shí)候就需要查看日志文件看錯(cuò)誤是什么。

運(yùn)行客戶端

? 當(dāng)我們把服務(wù)端部署成功后,下面就可以運(yùn)行客戶端了。客戶端有兩種運(yùn)行方式,第一種是直接在eclipse中運(yùn)行Loginframe.java文件,不需要運(yùn)行服務(wù)端,然后就可以實(shí)現(xiàn)登錄了。

? 第二種就是運(yùn)行jar文件,一般在別的機(jī)器上面運(yùn)行這個(gè)程序,運(yùn)行jar文件就可以了。但這種方式運(yùn)行時(shí)需要對方電腦也有JDK環(huán)境才能運(yùn)行成功。下次有時(shí)間講講這么打包成exe文件,及時(shí)對方無JDK,也可以用這個(gè)程序和你聊天。

? 打開cmd命令行,輸入命令cd xxx,這個(gè)xxx是你桌面的路徑,命令行跳轉(zhuǎn)到你的桌面目錄下,然后執(zhí)行命令java -jar client.jar就可以成功運(yùn)行客戶端,登錄界面就會出現(xiàn)。如果是服務(wù)端出錯(cuò)了的話,可能這邊會卡住或者在命令行打印連接服務(wù)器失敗。

? 要想在別的機(jī)器上面運(yùn)行這個(gè)程序,把client.jar發(fā)給對方,然后對方執(zhí)行上面的cmd命令操作就可以實(shí)現(xiàn)登錄了。

? 最后就可以實(shí)現(xiàn)多臺機(jī)器實(shí)現(xiàn)聊天了。

總結(jié)

以上是生活随笔為你收集整理的Java TCP实现高仿版QQ聊天(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。