版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第Java利用套接字實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問目錄前言Client.javaServer.javaServerThread.javaSearchInfo.javaGUI.java
前言
最近在完成軟件體系結(jié)構(gòu)上機(jī)實(shí)驗(yàn)時(shí),遇到一個(gè)有點(diǎn)點(diǎn)小難度的選做題,題目信息如下:
利用套接字技術(shù)實(shí)現(xiàn)應(yīng)用程序中對(duì)數(shù)據(jù)庫的訪問。應(yīng)用程序只是利用套接字連接向服務(wù)器發(fā)送一個(gè)查詢的條件,而服務(wù)器負(fù)責(zé)對(duì)數(shù)據(jù)庫的查詢,然后服務(wù)器再將查詢的結(jié)果利用建立的套接字返回給客戶端,如下圖所示。
本來吧,選做題,不太想做的,但是考慮到以后工作的方向和后端相關(guān),那還是做吧。
本次實(shí)驗(yàn)需要做一個(gè)GUI界面和一個(gè)連接查詢功能,在論壇上借鑒了其他大佬獲取網(wǎng)站內(nèi)容的部分代碼,然后自己做了一個(gè)及其簡(jiǎn)陋的swing界面,算是把這個(gè)實(shí)驗(yàn)完成了。
本次實(shí)驗(yàn)項(xiàng)目結(jié)構(gòu)如下
--socketProject
|--Client.java
|--GUI.java
|--SearchInfo.java
|--Server.java
|--ServerThread.java
Client.java
客戶端使用dis.readUTF()時(shí),要注意再發(fā)送個(gè)字符或者空字符,這里發(fā)送end,表示關(guān)閉連接。不然會(huì)出現(xiàn)EOFException。
packagesocketProject;
importjava.io.*;
import.*;
publicclassClient{
StringstudentNum=null;
Stringresult=null;
publicvoidsetStudentNum(Stringnum){
this.studentNum=num;
System.out.println("stu:"+studentNum);
publicvoidrun()throwsIOException{
Socketss=newSocket("",8888);
System.out.println("Socket:"+ss);
try{
DataInputStreamdis=newDataInputStream(ss.getInputStream());
DataOutputStreamdos=newDataOutputStream(ss.getOutputStream());
//theinteraction
dos.writeUTF(studentNum);//向服務(wù)器發(fā)送學(xué)號(hào)
dos.flush();
result=dis.readUTF().toString();//獲得客戶端的json字符串
System.out.println(result);
dos.writeUTF("end");//不加這句會(huì)報(bào)錯(cuò)
dos.flush();
if(dos!=null)
dos.close();
if(dis!=null)
dis.close();
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(ss!=null)
ss.close();
//gui界面用于獲取json結(jié)果
publicStringgetResult(){
returnresult;
Server.java
packagesocketProject;
importjava.io.*;
import.*;
publicclassServerextendsThread{
publicstaticfinalintPORT=8888;
//publicstaticvoidmain(String[]args)throwsIOException{
publicvoidrun(){
try(ServerSocketserverSocket=newServerSocket(PORT)){
System.out.println("ServerSocket:"+serverSocket);
try{
while(true){
Socketsocket=serverSocket.accept();
System.out.println("Socketaccept:"+socket);
Threadthread=newThread(newServerThread(socket));
thread.start();//開啟一個(gè)線程,使之支持接收多個(gè)客戶端的請(qǐng)求
}finally{
serverSocket.close();
}catch(IOExceptione){
e.printStackTrace();
ServerThread.java
packagesocketProject;
importjava.io.*;
import.*;
publicclassServerThreadextendsThread{
Socketsocket=null;
publicServerThread(Socketsocket){
this.socket=socket;
publicvoidrun(){
try{
DataInputStreamdis=newDataInputStream(socket.getInputStream());
DataOutputStreamdos=newDataOutputStream(socket.getOutputStream());
while(true){
Stringstr=dis.readUTF().toString();
Stringdata=newSearchInfo().run(str);
if(str.equals("end"))
break;
dos.writeUTF(data);
dos.close();
dis.close();
}catch(IOExceptione){
e.printStackTrace();
SearchInfo.java
packagesocketProject;
importjava.io.*;
import.*;
publicclassSearchInfo{
publicStringrun(Strings){
Stringurl="yourdatabaseinterface";
Stringparam=s;
StringsendGET=GetUrl(url,param);
returnsendGET;
publicstaticStringGetUrl(Stringurl,Stringparam){
Stringresult="";//definetheresultstr
BufferedReaderread=null;//definetheaccessresult
try{
URLrealUrl=newURL(url+param);
URLConnectionconnection=realUrl.openConnection();
connection.setRequestProperty("accept","*/*");
connection.setRequestProperty("connection","Keep-Alive");
connection.setRequestProperty("user-agent","Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.1;SV1)");
//這里補(bǔ)充通用的請(qǐng)求屬性
connection.connect();//建立實(shí)際的連接
read=newBufferedReader(newInputStreamReader(connection.getInputStream(),"UTF-8"));
Stringline;
while((line=read.readLine())!=null){
result+=line;
}catch(Exceptione){
e.printStackTrace();
}finally{
if(read!=null){//關(guān)閉流
try{
read.close();
}catch(Exceptione){
e.printStackTrace();
returnresult;
publicStringgetJSON(Stringparam){
returnparam;
GUI.java
packagesocketProject;
importjava.awt.*;
importjava.awt.event.*;
importjava.io.IOException;
importjavax.swing.*;
publicclassGUIextendsJFrame{
privateJButtonconnectDataBase;
privateJLabelentryStudentNum;
privateJTextFieldstudentNum;
privateJButtonsendRequest;
privateJLabelshowResponseMsg;
privateJPanelnorthPanel;
privateJPanelsouthPanel;
publicGUI(){
init();
publicvoidinit(){
setTitle("沒啥技術(shù)含量的東西");
//definethecomponentforthewindow
connectDataBase=newJButton("連接數(shù)據(jù)庫");
entryStudentNum=newJLabel("輸入學(xué)號(hào)");
studentNum=newJTextField();
sendRequest=newJButton("發(fā)送");
showResponseMsg=newJLabel();
//addthecomponenttothepanel
this.setLayout(newGridLayout(2,1));
northPanel=newJPanel(newGridLayout(1,4));
northPanel.add(connectDataBase);
northPanel.add(entryStudentNum);
northPanel.add(studentNum);
northPanel.add(sendRequest);
southPanel=newJPanel(newGridLayout(1,1));
southPanel.add(showResponseMsg);
setButtons();
this.add(northPanel);
this.add(southPanel);
//initialthewindow
setBounds(400,200,600,120);
setResizable(false);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
publicvoidsetButtons(){
connectDataBase.addActionListener(newActionListener(){
@Override
publicvoidactionPerformed(ActionEvente){
//這里初始化服務(wù)端
Serverserver1=newServer();
Threadth1=newThread(server1);
th1.start();
//這里一定要開啟服務(wù)端線程,否則在點(diǎn)擊此按鈕后,整個(gè)界面會(huì)卡住,無法進(jìn)行下一步操作
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中職(汽車運(yùn)用與維修)汽車漆面修復(fù)試題及解析
- 2025年高職(冷鏈物流技術(shù))冷鏈運(yùn)輸管理試題及解析
- 2025年大學(xué)(中西醫(yī)臨床醫(yī)學(xué))精準(zhǔn)中西醫(yī)結(jié)合醫(yī)學(xué)試題及答案
- 2025年中職機(jī)電技術(shù)應(yīng)用(電工儀表使用)試題及答案
- 2025年大學(xué)(預(yù)防醫(yī)學(xué))流行病學(xué)階段測(cè)試題及解析
- 2025年大學(xué)植物保護(hù)(植物保護(hù))試題及答案
- 2025年高職托育基礎(chǔ)(托育基礎(chǔ))試題及答案
- 2025年高職通信技術(shù)(5G技術(shù)應(yīng)用)試題及答案
- 2025年中職藝術(shù)(藝術(shù)基礎(chǔ)應(yīng)用)試題及答案
- 2026年河南農(nóng)業(yè)職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能筆試參考題庫帶答案解析
- 智慧林業(yè)云平臺(tái)信息化建設(shè)詳細(xì)規(guī)劃
- 培養(yǎng)方案修訂情況匯報(bào)
- 監(jiān)控綜合維保方案(3篇)
- 犢牛獸醫(yī)工作總結(jié)
- JJF(陜) 125-2025 醫(yī)用移動(dòng)式 C 形臂 X 射線輻射源校準(zhǔn)規(guī)范
- T/CCOA 33-2020平房倉氣密改造操作規(guī)范
- 自行車購(gòu)車協(xié)議合同
- 2025萍鄉(xiāng)市湘東區(qū)輔警考試試卷真題
- 幼兒基本律動(dòng)培訓(xùn)
- 認(rèn)知障礙門診管理制度
- 農(nóng)村經(jīng)濟(jì)統(tǒng)計(jì)培訓(xùn)
評(píng)論
0/150
提交評(píng)論