Java利用套接字實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問_第1頁
Java利用套接字實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問_第2頁
Java利用套接字實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問_第3頁
Java利用套接字實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問_第4頁
Java利用套接字實(shí)現(xiàn)應(yīng)用程序?qū)?shù)據(jù)庫的訪問_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論