版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
實驗設(shè)計目的:(1)掌握類的定義和使用;(2)掌握對象的定義;(3)掌握線程的使用。實驗設(shè)計內(nèi)容:設(shè)計一個類似qq群聊的聊天軟件技術(shù)要點:客戶端和服務(wù)器端的開發(fā),數(shù)據(jù)庫的鏈接與使用實驗條件:(1)主要設(shè)備:586或更高機型,256MB或更高的內(nèi)存,40G或更大的硬盤。(2)主要軟件:①操作系統(tǒng)可為Windows9X、WinMe、Win2000或更高版本等;②開發(fā)環(huán)境為jdk或者jcreator。(3)參考書目:①尹繼平,張帆.java范例大全.機械工業(yè)出版社②施霞萍.java程序設(shè)計教程.機械工業(yè)出版社實驗方法與步驟:這個軟件從0.1到1.3一共13個版本。0.1到0.4版本為客戶端界面設(shè)計,第0.5到1.2版本為服務(wù)器端設(shè)計以及客戶端與服務(wù)器端通信連接的設(shè)計實現(xiàn)。1.3版為完善之前版本的缺陷并添加登陸界面。最終版本1.3版中一共三個類(如圖一所示)源代碼如下://客戶端importjava.awt.*;importjava.awt.event.*;importjava.io.IOException;import.*;importjava.io.*;publicclassChatClientextendsFrame{ Sockets=null; DataOutputStreamdos=null; DataInputStreamdis=null; privatebooleanbConnected=false; privatestaticfinallongserialVersionUID=1L; TextFieldtfTxt=newTextField(); TextAreataContent=newTextArea(); publicstaticvoidmain(String[]args){ //TODOAuto-generatedmethodstub newLogin(); } publicvoidlaunchFrame(){ setLocation(400,300); this.setSize(300,300); add(tfTxt,BorderLayout.SOUTH); add(taContent,BorderLayout.NORTH); pack(); this.addWindowListener(newWindowAdapter(){ @Override publicvoidwindowClosing(WindowEvente){ disconnect(); System.exit(0); } }); tfTxt.addActionListener(newTFListener()); setVisible(true); connect(); newThread(newRecvThead()).start(); } publicvoidconnect(){ try{ s=newSocket("",8888); dos=newDataOutputStream(s.getOutputStream()); dis=newDataInputStream(s.getInputStream()); System.out.print("lianjieshangle"); bConnected=true; }catch(UnknownHostExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicvoiddisconnect(){ try{ dos.close(); s.close(); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } privateclassTFListenerimplementsActionListener{ publicvoidactionPerformed(ActionEvente){ Stringip=null; Stringaddress=null; InetAddressaddr; try{ addr=InetAddress.getLocalHost(); ip=addr.getHostAddress().toString();//獲得本機IP address=addr.getHostName().toString();//獲得本機名稱 }catch(UnknownHostExceptione2){ //TODOAuto-generatedcatchblock e2.printStackTrace(); } Stringstr=address+ip+"\n"+tfTxt.getText().trim(); // taContent.setText(str); tfTxt.setText(""); try{ //DataOutputStreamdos=new //DataOutputStream(s.getOutputStream()); dos.writeUTF(str); dos.flush(); //dos.close(); }catch(IOExceptione1){ //TODOAuto-generatedcatchblock e1.printStackTrace(); } } } privateclassRecvTheadimplementsRunnable{ @Override publicvoidrun(){ try{ while(bConnected){ Stringstr; str=dis.readUTF(); taContent.setText(taContent.getText()+str+'\n'); System.out.print(str); } }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } }}//服務(wù)器端importjava.io.DataInputStream;importjava.io.EOFException;importjava.io.IOException;importjava.io.*;import.*;importjava.util.*;publicclassChatServer{ booleanstarted=false; ServerSocketss=null; List<Client>clients=newArrayList<Client>(); publicstaticvoidmain(String[]args){ //Sockets=null; //DataInputStreamdis=null; newChatServer().start(); } publicvoidstart(){ try{ ss=newServerSocket(8888); started=true; }catch(BindExceptione){ System.out.print("端口使用中!\n"); System.out.print("請關(guān)閉相關(guān)程序重新運行程序!\n"); System.exit(0); }catch(IOExceptione){ e.printStackTrace(); } try{ while(started){ //ooleanbConnected=false; //s=ss.accept(); Sockets=ss.accept(); Clientc=newClient(s); System.out.print("已連接!\n"); newThread(c).start(); clients.add(c); } //dis.close(); }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ ss.close(); }catch(IOExceptione1){ e1.printStackTrace(); } } } classClientimplementsRunnable{ privateSockets; privateDataInputStreamdis=null; privateDataOutputStreamdos=null; privatebooleanbConnected=false; publicClient(Sockets){ this.s=s; try{ dis=newDataInputStream(s.getInputStream()); dos=newDataOutputStream(s.getOutputStream()); bConnected=true; }catch(IOExceptione){ e.printStackTrace(); } } publicvoidsend(Stringstr){ try{ dos.writeUTF(str); }catch(IOExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } publicvoidrun(){ try{ while(bConnected){ Stringstr=dis.readUTF();System.out.print(str+"\n"); for(inti=0;i<clients.size();i++){ Clientc=clients.get(i); c.send(str); } } }catch(EOFExceptione){ System.out.print("客戶端斷開連接!\n"); }catch(IOExceptione){ e.printStackTrace(); }finally{ try{ if(dis!=null) dis.close(); if(dos!=null) dos.close(); //if(s!=null)s.close(); }catch(IOExceptione1){ e1.printStackTrace(); } } } }}//客戶端登陸*Tochangethistemplate,chooseTools|Templatesimportjavax.swing.*;/****@authorAdministrator*/publicclassLoginextendsJFrameimplementsActionListener{JPanelpnlLogin;JLabellblUserName,lblPassword,P;JButtonbtnLogin,btnExit;JTextFieldtxtUserName,txtlbldl;JPasswordFieldpwdPassword;DimensiondsSize;Toolkittoolkit=Toolkit.getDefaultToolkit();publicLogin(){super("登陸");pnlLogin=newJPanel();this.getContentPane().add(pnlLogin);pnlLogin.setLayout(null);lblUserName=newJLabel("用戶名(U):");lblPassword=newJLabel("密碼:");txtUserName=newJTextField(20);pwdPassword=newJPasswordField(30);btnLogin=newJButton("登錄(L)");btnLogin.setMnemonic('L');btnExit=newJButton("退出(X)");btnExit.setToolTipText("退出系統(tǒng)");btnExit.setMnemonic('X');btnLogin.addActionListener(this);btnExit.addActionListener(this);//P.setBounds(0,0,315,120);//pnlLogin.add(P);pnlLogin.setBackground(Color.WHITE);lblUserName.setBounds(10,125,90,25);txtUserName.setBounds(120,125,180,25);lblPassword.setBounds(10,155,90,25);pwdPassword.setBounds(120,155,180,25);btnLogin.setBounds(20,185,80,25);btnExit.setBounds(220,185,80,25);lblUserName.setForeground(Color.BLACK);lblUserName.setBackground(Color.WHITE);lblPassword.setForeground(Color.BLACK);lblPassword.setBackground(Color.WHITE);pnlLogin.add(lblUserName);pnlLogin.add(txtUserName);pnlLogin.add(lblPassword);pnlLogin.add(pwdPassword);pnlLogin.add(btnLogin);pnlLogin.add(btnExit);setResizable(false);setSize(315,245);setVisible(true);dsSize=toolkit.getScreenSize();setLocation(dsSize.width/2-this.getWidth()/2,dsSize.height/2-this.getHeight()/2);}@OverridepublicvoidactionPerformed(ActionEventae){if(ae.getSource()==btnLogin){Stringjusername=txtUserName.getText().trim();char[]s=pwdPassword.getPassword();Stringjpassword=newString(s);if(jusername.equals("")||jpassword.equals("")){JOptionPane.showMessageDialog(this,"對不起,請輸入用戶名或密碼.","錯誤!",JOptionPane.ERROR_MESSAGE);}else{try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//System.out.println("加載驅(qū)動程序成功");}catch(Exceptione){System.out.println("無法加載驅(qū)動程序");}try{ Stringurl="jdbc:sqlserver://localhost:1433;DatabaseName=login"; //pubs為你的數(shù)據(jù)庫的 Stringuser="";//用自己的數(shù)據(jù)庫登錄賬戶和密碼 Stringpassword="";//Connectionconn=DriverManager.getConnection(url,user,password);Statementstmt=conn.createStatement();//if(jusername.length()<30){// for(inti=0;i<27;i++)// jusername=jusername+"";//}ResultSetrs=stmt.executeQuery("selectusername,passwordfromlogin_userwhereusername='"+jusername+"'");if(rs.next()){ Stringa=rs.getString("password").trim();if(a.equals(jpassword)){JOptionPane.showMessageDialog(null,"登陸成功");newChatClient().launchFrame();super.setVisible(false);}else{JOptionPane.showMessageDialog(this,"對不起,密碼錯誤,請重新輸入","登陸失敗",JOptionPane.ERROR_MESSAGE);}}else{JOptionPane.showMessageDialog
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 喉部阻塞感的健康宣教
- JJF(陜) 080-2021 連續(xù)式路面平整度測定儀(非激光型)校準規(guī)范
- JJF(陜) 032-2020 混凝土坍落度儀校準規(guī)范
- 《收集需求》課件
- 年度班級活動安排與總結(jié)計劃
- 【小學(xué)課件】學(xué)生安全教育主題班會
- 2024-2025學(xué)年年九年級數(shù)學(xué)人教版下冊專題整合復(fù)習(xí)卷第28章 銳角三角函數(shù) 解答題練習(xí)及答案
- 秋季學(xué)期家校合作計劃
- 雙酚A相關(guān)項目投資計劃書范本
- 中心靜脈導(dǎo)管相關(guān)項目投資計劃書范本
- 《旅游市場營銷》課程教學(xué)設(shè)計
- 北師大版小學(xué)數(shù)學(xué)二年級上冊《需要幾個輪子》集體備課教學(xué)課件
- 超市零售行業(yè)的線上線下融合與用戶體驗
- 脊柱外科護理規(guī)劃方案課件
- 與村委會合作休閑旅游 項目協(xié)議書
- 《俄羅斯國情概況》課件
- 幕墻工程檢驗批質(zhì)量驗收記錄
- 2023年日本醫(yī)藥行業(yè)分析報告
- 關(guān)于社會保險經(jīng)辦機構(gòu)內(nèi)部控制講解
- 山東建筑大學(xué)混凝土結(jié)構(gòu)設(shè)計期末考試復(fù)習(xí)題
- 膠原蛋白注射知情同意書
評論
0/150
提交評論