版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、<p><b> JAVA程序設計</b></p><p><b> 課程設計說明書</b></p><p> ----即時聊天系統(tǒng)</p><p> 院 系: 國際教育學院 </p><p> 專業(yè)班級: 互聯(lián)網(wǎng)10-02班 <
2、;/p><p> 指導教師: ______</p><p> 姓 名: _____</p><p> 學 號: </p><p> 成 績: </p><p>
3、2012年 06 月 07 日</p><p><b> 目 錄</b></p><p><b> 1 需求分析1</b></p><p> 1.1 用戶調(diào)查1</p><p> 1.2構(gòu)造系統(tǒng)的邏輯模型1</p><p> 1.3 確定目標系統(tǒng)的功能………
4、…………………………………...2</p><p> 1.4數(shù)據(jù)分析——概念模型分析............................3</p><p> 2 總體設計................................................................................................2</p>
5、<p> 2.1軟件系統(tǒng)結(jié)構(gòu)的設計2</p><p> 2.1.1得到新的業(yè)務流程……………………………………………………….2</p><p> 2.1.2系統(tǒng)功能結(jié)構(gòu)圖.............................................2</p><p><b> 3 詳細設計3</b><
6、;/p><p><b> 3.1具體描述3</b></p><p> 3.2具體實現(xiàn)步驟3</p><p> 3.3程序源代碼..........................................7</p><p><b> 4 總結(jié)19</b></p><
7、;p> 4.1設計體會………………………………………………………..19</p><p><b> 1 需求分析</b></p><p><b> 1.1用戶調(diào)查</b></p><p> 經(jīng)過詳細的調(diào)研,即時聊天工具現(xiàn)在流行于各種人群中,以青少年為主的學生群。主要分為用戶注冊、用戶登錄等。即時聊天系統(tǒng)的流程
8、描述如下:</p><p> 注冊,連接服務器后,新用戶需要注冊,然后才能登錄。 </p><p> 注冊后才能登錄,信息寫進數(shù)據(jù)庫。</p><p> 登錄后,可以進行添加好友,找好友聊天,對好友進行管理等操作。</p><p> 退出,在結(jié)束登錄時需要退去即時聊天系統(tǒng),并回到登錄界面。</p><p>
9、根據(jù)以上總結(jié),得到其現(xiàn)行的業(yè)務流程如圖1-1所示。</p><p> 圖1-1即時聊天業(yè)務流程圖</p><p> 1.2 構(gòu)造系統(tǒng)的邏輯模型</p><p> 構(gòu)造系統(tǒng)的邏輯模型的工具是數(shù)據(jù)流圖和數(shù)據(jù)字典。數(shù)據(jù)流圖中沒有任何具體的物理元素,只是用來描繪信息在系統(tǒng)中的流動和處理情況。數(shù)據(jù)流圖共有四種基本符號:矩形表示數(shù)據(jù)的源點和終點(或稱為外部項),圓或橢圓表
10、示變換數(shù)據(jù)的處理,向右開口的矩形表示數(shù)據(jù)存儲,箭頭表示數(shù)據(jù)流,即特定數(shù)據(jù)的流動方向。根據(jù)現(xiàn)行學生信息管理的業(yè)務流程,首先確定數(shù)據(jù)流圖中的源點和終點都選定為學生,如此就得到了學生檔案管理系統(tǒng)的基本系統(tǒng)模型,如圖1-2所示。</p><p> 圖1-2 即時聊天系統(tǒng)的基本系統(tǒng)模型</p><p> 1.3 確定目標系統(tǒng)的功能</p><p> 通過詳細的用戶調(diào)查,
11、在現(xiàn)行的業(yè)務處理流程和數(shù)據(jù)流圖的基礎上,就可以基本確定目標系統(tǒng)要達到的目標了。需求分析的任務是確定系統(tǒng)必須完成的工作,也就是對目標系統(tǒng)提出完整、標準、清晰、具體的要求。在經(jīng)過多方了解和調(diào)查后,基本清楚了即時聊天系統(tǒng)的功能需求,即時聊天系統(tǒng)必須完成以下功能:</p><p> 注冊功能:對于新用戶,系統(tǒng)必須能對新用戶進行注冊,在用戶輸入各項信息后,將信息保存進數(shù)據(jù)庫。</p><p>
12、登錄功能:在新用戶注冊完成后,系統(tǒng)能在用戶輸入登錄信息后,連接數(shù)據(jù)庫并匹配用戶登錄信息,使該用戶能登錄服務器。</p><p> 添加好友功能:用戶能通過添加好友按鈕就行好友添加。</p><p> 即時聊天功能:作為本系統(tǒng)的最主要功能,用戶能即時的和好友聊天,并可以搜索聊天記錄。</p><p> 1.4 數(shù)據(jù)分析——概念模型分析</p>&l
13、t;p> 需求分析階段主要有兩個方面的任務:分析用戶的數(shù)據(jù)要求和分析用戶的處理要求。通過以上分析,我們已經(jīng)基本了解了用戶對處理的要求,接下來需要的工作是分析用戶對數(shù)據(jù)的要求。</p><p> 為了把用戶的數(shù)據(jù)清晰明確地表達出來,系統(tǒng)分析員通常建立一個概念性的數(shù)學模型。概念性模型是一種面向問題的數(shù)學模型,是按用戶的觀點來對數(shù)據(jù)和信息建模。最常用的表示概念性數(shù)據(jù)模型的方法是實體-聯(lián)系方法(Entity-R
14、elationship Approach)。這種方法用E-R圖描述現(xiàn)實世界中的實體,而不涉及這些實體在系統(tǒng)中的實現(xiàn)方法,該方法又稱為E-R模型,E-R圖中共用三種符號:實體、屬性和聯(lián)系。通常實體用矩形來表示,屬性用橢圓或圓角矩形來表示,聯(lián)系用菱形來表示。聯(lián)系有分為一對一、一對多和多對多三種類型。</p><p><b> 2.總體設計</b></p><p> 系
15、統(tǒng)設計一般分為總體設計和詳細設計。經(jīng)過需求分析階段的工作,已經(jīng)清楚系統(tǒng)必須完成的工作,下面的工作就應該是決定“如何做”的問題,總體設計的基本目的的就是“概要地說系統(tǒng)應該如何實現(xiàn)?”。通過該階段的工作將劃分出組成系統(tǒng)的物理元素—程序、文件、數(shù)據(jù)庫、文檔等,另一方面的主要工作是設計軟件的結(jié)構(gòu),即確定系統(tǒng)都由哪些模塊組成及模塊之間的相互關系。</p><p> 2.1軟件系統(tǒng)結(jié)構(gòu)的設計</p><
16、p> 2.1.1 得到新的業(yè)務流程</p><p> 根據(jù)系統(tǒng)分析得到的現(xiàn)行業(yè)務處理流程,在與用戶反復研究協(xié)商后,首先得到目標系統(tǒng)即學生學籍管理系統(tǒng)的業(yè)務流程,其處理流程如圖2-1所示。</p><p> 圖2-1 即時聊天系統(tǒng)的業(yè)務流程</p><p> 針對新的處理流程,現(xiàn)具體描述如下:</p><p> 用戶注冊:對新用
17、戶進行信息錄入。</p><p> 登錄:連接數(shù)據(jù)庫,匹配輸入登錄信息和數(shù)據(jù)庫信息,成功則進入聊天室。</p><p> 計入聊天室,進行聊天以及對好友的一系列操作。</p><p> 2.1.2系統(tǒng)功能結(jié)構(gòu)圖</p><p> 根據(jù)系統(tǒng)分析階段得到的數(shù)據(jù)流圖,采用軟件設計的概念和原理,我們能測試程序能否正常運行。</p>
18、<p><b> 3.詳細設計</b></p><p><b> 3.1 具體描述</b></p><p> 圖3-2 軟件系統(tǒng)主程序的程序流程圖</p><p> 3.2 具體實現(xiàn)步驟:</p><p><b> 注冊界面如下圖:</b></p&
19、gt;<p><b> 圖3-3</b></p><p><b> 登錄界面如圖:</b></p><p><b> 聊天室窗口界面:</b></p><p><b> 啟動服務器:</b></p><p><b> 連接
20、服務器:</b></p><p><b> 實現(xiàn)私聊:</b></p><p><b> 圖3-5</b></p><p> ?。?)若選擇修改操作,則進入如下界面:</p><p><b> 界面實現(xiàn)代碼:</b></p><p>
21、 注冊界面代碼:package t_test;</p><p> import javax.swing.*;</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import java.net.*;</p><p> i
22、mport java.io.*;</p><p> public class Register extends JFrame implements ActionListener</p><p><b> {</b></p><p> private JComboBox comboBox;</p><p> pr
23、ivate static final long serialVersionUID = 9019746127517522180L;</p><p> JPanel pnlRegister;</p><p> JLabel lblUserName,lblGender,lblAge;</p><p> JLabel lblPassword,lblConfirm
24、Pass,lblEmail,logoPosition;</p><p> JTextField txtUserName,txtAge,txtEmail;</p><p> JPasswordField pwdUserPassword,pwdConfirmPass;</p><p> JRadioButton rbtnMale,rbtnFemale;<
25、;/p><p> ButtonGroup btngGender;</p><p> JButton btnOk,btnCancel,btnClear;</p><p> String strServerIp;</p><p> final JLabel headLabel = new JLabel();</p><
26、;p> Dimension scrnsize;</p><p> Toolkit toolkit=Toolkit.getDefaultToolkit();</p><p> public Register(String ip)</p><p> { super("注冊");</p><p> strSe
27、rverIp=ip;</p><p> pnlRegister=new JPanel();</p><p> this.getContentPane().add(pnlRegister);</p><p> lblUserName=new JLabel("用 戶 名:");</p><p> lblGender=n
28、ew JLabel("性 別:");</p><p> lblAge=new JLabel("年 齡:");</p><p> lblPassword=new JLabel("密碼:");</p><p> lblConfirmPass=new JLabel("確認密碼:&quo
29、t;);</p><p> lblEmail=new JLabel("電子郵件:");</p><p> txtUserName=new JTextField(30);</p><p> txtEmail=new JTextField(30);</p><p> txtAge=new JTextField(10);
30、</p><p> pwdUserPassword=new JPasswordField(30);</p><p> pwdConfirmPass=new JPasswordField(30);</p><p> rbtnMale=new JRadioButton("男",true);</p><p> rbtnF
31、emale=new JRadioButton("女");</p><p> btngGender=new ButtonGroup();</p><p> btnOk=new JButton("確定");</p><p> btnOk.setToolTipText("保存注冊信息");</p>
32、;<p> btnCancel=new JButton("返回");</p><p> btnCancel.setToolTipText("返回登錄窗口");</p><p> btnClear=new JButton("清空");</p><p> btnClear.setToolT
33、ipText("清空注冊信息");</p><p> pnlRegister.setLayout(null);</p><p> lblUserName.setBounds(30,80,100,30);</p><p> txtUserName.setBounds(110,85,120,20);</p><p>
34、lblPassword.setBounds(30,141,100,30);</p><p> pwdUserPassword.setBounds(110,146,120,20);</p><p> lblConfirmPass.setBounds(30,166,100,30);</p><p> pwdConfirmPass.setBounds(110,171
35、,120,20);</p><p> lblGender.setBounds(30,191,100,30);</p><p> rbtnMale.setBounds(110,196,60,20);</p><p> rbtnFemale.setBounds(190,196,60,20);</p><p> lblAge.setBoun
36、ds(30,216,100,30);</p><p> txtAge.setBounds(110,221,120,20);</p><p> lblEmail.setBounds(30,241,100,30);</p><p> txtEmail.setBounds(110,246,120,20);</p><p> btnOk.se
37、tBounds(246,166,80,25);</p><p> btnCancel.setBounds(246,201,80,25);</p><p> btnClear.setBounds(246,241,80,25);</p><p> Font fontstr=new Font("宋體",Font.PLAIN,12);</
38、p><p> lblUserName.setFont(fontstr);</p><p> lblGender.setFont(fontstr);</p><p> lblPassword.setFont(fontstr);</p><p> lblConfirmPass.setFont(fontstr);</p><
39、p> lblAge.setFont(fontstr);</p><p> lblEmail.setFont(fontstr);</p><p> rbtnMale.setFont(fontstr);</p><p> rbtnFemale.setFont(fontstr);</p><p> txtUserName.setFo
40、nt(fontstr);</p><p> txtEmail.setFont(fontstr);</p><p> btnOk.setFont(fontstr);</p><p> btnCancel.setFont(fontstr);</p><p> btnClear.setFont(fontstr);</p>&
41、lt;p> rbtnMale.setOpaque(false); </p><p> rbtnFemale.setOpaque(false);</p><p> pnlRegister.add(lblUserName);</p><p> pnlRegister.add(lblPassword);</p><p> pnl
42、Register.add(lblConfirmPass);</p><p> pnlRegister.add(lblEmail);</p><p> pnlRegister.add(lblAge);</p><p> pnlRegister.add(txtAge);</p><p> pnlRegister.add(txtUserNa
43、me);</p><p> pnlRegister.add(txtEmail);</p><p> pnlRegister.add(pwdUserPassword);</p><p> pnlRegister.add(pwdConfirmPass);</p><p> pnlRegister.add(btnOk);</p>
44、<p> pnlRegister.add(btnCancel);</p><p> pnlRegister.add(btnClear);</p><p> pnlRegister.add(rbtnMale);</p><p> pnlRegister.add(rbtnFemale);</p><p> btngGend
45、er.add(rbtnMale);</p><p> btngGender.add(rbtnFemale); </p><p> this.setSize(360,313);</p><p> this.setVisible(true);</p><p> this.setResizable(false);</p>
46、<p> btnOk.addActionListener(this);</p><p> btnCancel.addActionListener(this);</p><p> btnClear .addActionListener(this);</p><p><b> }</b></p><p&g
47、t; public void actionPerformed(ActionEvent ae)</p><p><b> {</b></p><p> Object source=new Object();</p><p> source=ae.getSource();</p><p> if (source.e
48、quals(btnOk)) {</p><p> register();</p><p><b> }</b></p><p> if (source.equals(btnCancel)) </p><p><b> {</b></p><p>
49、 new Login();</p><p> this.dispose();</p><p><b> }</b></p><p> if (source.equals(btnClear)) {</p><p> txtUserName.setText("");</p&g
50、t;<p> pwdUserPassword.setText("");</p><p> pwdConfirmPass.setText("");</p><p> txtAge.setText("");</p><p> txtEmail.setText("");
51、</p><p><b> }</b></p><p><b> }</b></p><p> public void register()</p><p><b> {</b></p><p> Register_Customer data
52、=new Register_Customer();</p><p> data.custName = txtUserName.getText();</p><p> data.custPassword = pwdUserPassword.getText();</p><p> data.age = txtAge.getText();&
53、lt;/p><p> data.sex = rbtnMale.isSelected()?"男":"女";</p><p> data.email = txtEmail.getText();</p><p><b> //chenmin</b></p><
54、;p> if(data.custName.length()==0)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"用戶名不能為空");</p><p><b> return;</b></p>
55、<p><b> }</b></p><p> if(data.custPassword.length()==0)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"密碼不能為空");</p>
56、;<p><b> return;</b></p><p><b> }</b></p><p> if(!data.custPassword.equals(pwdConfirmPass.getText()))</p><p><b> {</b></p><
57、;p> JOptionPane.showMessageDialog(null,"密碼兩次輸入不一致,請重新輸入"); return;</p><p><b> }</b></p><p> int age=Integer.parseInt(txtAge.getText());</p><p> if (ag
58、e<=0||age>100){</p><p> JOptionPane.showMessageDialog(null,"年齡輸入不合法");</p><p><b> return;</b></p><p> }int Found_flag=0; //判斷標志</p><p&
59、gt; for (int i=0;i<data.email.length();i++)</p><p><b> {</b></p><p> if(data.email.charAt(i)=='@')</p><p><b> {</b></p><p> Foun
60、d_flag++;</p><p><b> }</b></p><p><b> }</b></p><p> if(Found_flag!=1)</p><p><b> {</b></p><p> JOptionPane.showM
61、essageDialog(null,"電子郵箱格式不正確,請重新輸入");</p><p><b> return;</b></p><p><b> }</b></p><p> data_test dt=new data_test();</p><p> dt.a
62、ddData("1",data.custName, data.custPassword, data.sex, data.age, data.email);</p><p><b> try</b></p><p><b> {</b></p><p> Socket toServer;</p
63、><p> toServer = new Socket(strServerIp,1001);</p><p> ObjectOutputStream streamToServer=new ObjectOutputStream (toServer.getOutputStream());</p><p> streamToServer.writeObject
64、((Register_Customer)data); BufferedReader fromServer=new BufferedReader(new InputStreamReader(toServer.getInputStream()));</p><p> String status=fromServer.readLine();</p><p> JOpti
65、onPane op=new JOptionPane();</p><p> op.showMessageDialog(null,status);</p><p> if(status.equals(data.custName+"注冊成功"))</p><p><b> {</b></p><p>
66、; txtUserName.setText("");</p><p> pwdUserPassword.setText("");</p><p> pwdConfirmPass.setText("");</p><p> txtAge.setText("");</p>
67、<p> txtEmail.setText("");</p><p><b> }</b></p><p> streamToServer.close();</p><p> fromServer.close();</p><p><b> }</b>&l
68、t;/p><p> catch(InvalidClassException e1)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"類錯誤!");</p><p><b> }</b></p
69、><p> catch(NotSerializableException e2)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"對象未序列化!");</p><p><b> }</b><
70、/p><p> catch(IOException e3)</p><p><b> {</b></p><p> JOptionPane.showMessageDialog(null,"不能寫入到指定服務器!");</p><p><b> }</b></p>
71、<p><b> } </b></p><p> public static void main(String args[])</p><p><b> {</b></p><p> new Register("127.0.0.1");</p><p><
72、;b> }</b></p><p><b> } </b></p><p><b> 登錄界面代碼:</b></p><p> package t_test;</p><p> import javax.swing.*;</p><p> im
73、port java.awt.*;</p><p> import java.awt.event.*;</p><p> import java.net.*;</p><p> import java.sql.ResultSet;</p><p> import java.sql.Statement;</p><p&
74、gt; import java.io.*;</p><p> public class Login extends JFrame implements ActionListener {</p><p> private static final long serialVersionUID = -8965773902056088264L;</p><p> p
75、rivate JPanel pnlLogin;</p><p> private JButton btnLogin, btnRegister, btnExit;</p><p> private JLabel lblServer, lblUserName, lblPassword, lblLogo;</p><p> private JTextField tx
76、tUserName, txtServer;</p><p> private JPasswordField pwdPassword;</p><p> private String strServerIp;</p><p> private Dimension scrnsize;</p><p> private Toolkit to
77、olkit = Toolkit.getDefaultToolkit();</p><p> public Login() {</p><p> super("登錄");</p><p> pnlLogin = new JPanel();</p><p> this.getContentPane().add(pnlL
78、ogin);</p><p> lblServer = new JLabel("服務器:");</p><p> lblUserName = new JLabel("用戶名:");</p><p> lblPassword = new JLabel("密碼:");</p><p&g
79、t; txtServer = new JTextField(20);</p><p><b> try {</b></p><p> InetAddress address = InetAddress.getLocalHost();</p><p> String ip=address.getHostAddress();</p&g
80、t;<p> System.out.print(ip);</p><p> txtServer.setText(ip);</p><p> } catch (UnknownHostException e) {</p><p> e.printStackTrace();</p><p><b> }</b
81、></p><p> txtUserName = new JTextField(20);</p><p> pwdPassword = new JPasswordField(20);</p><p> btnLogin = new JButton("登錄");</p><p> btnLogin.setToo
82、lTipText("登錄到服務器");</p><p> btnRegister = new JButton("注冊");</p><p> btnRegister.setToolTipText("注冊新用戶");</p><p> btnExit = new JButton("退出&quo
83、t;);</p><p> btnExit.setToolTipText("退出系統(tǒng)");</p><p> pnlLogin.setLayout(null);</p><p> lblServer.setBounds(50, 100, 100, 30);</p><p> txtServer.setBounds(
84、150, 100, 120, 25);</p><p> lblUserName.setBounds(50, 130, 100, 30);</p><p> txtUserName.setBounds(150, 130, 120, 25);</p><p> lblPassword.setBounds(50, 160, 100, 30);</p>
85、<p> pwdPassword.setBounds(150, 160, 120, 25);</p><p> btnLogin.setBounds(50, 200, 80, 25);</p><p> btnRegister.setBounds(130, 200, 80, 25);</p><p> btnExit.setBounds(210,
86、 200, 80, 25);</p><p> Font fontstr = new Font("宋體", Font.PLAIN, 12);</p><p> lblServer.setFont(fontstr);</p><p> txtServer.setFont(fontstr);</p><p> lblU
87、serName.setFont(fontstr);</p><p> txtUserName.setFont(fontstr);</p><p> lblPassword.setFont(fontstr);</p><p> pwdPassword.setFont(fontstr);</p><p> btnLogin.setFont
88、(fontstr);</p><p> btnRegister.setFont(fontstr);</p><p> btnExit.setFont(fontstr);</p><p> pnlLogin.add(lblServer);</p><p> pnlLogin.add(txtServer);</p><
89、p> pnlLogin.add(lblUserName);</p><p> pnlLogin.add(txtUserName);</p><p> pnlLogin.add(lblPassword);</p><p> pnlLogin.add(pwdPassword);</p><p> pnlLogin.add(btnL
90、ogin);</p><p> pnlLogin.add(btnRegister);</p><p> pnlLogin.add(btnExit);</p><p> setResizable(false);</p><p> setSize(340, 260);</p><p> setVisible(tr
91、ue);</p><p> btnLogin.addActionListener(this);</p><p> btnRegister.addActionListener(this);</p><p> btnExit.addActionListener(this);</p><p> }public void actionPer
92、formed(ActionEvent ae) {</p><p> Object source = ae.getSource();</p><p> if (source.equals(btnLogin)) {</p><p> if (txtUserName.getText().equals("")</p><p>
93、; || pwdPassword.getText().equals("")) {</p><p> JOptionPane op1 = new JOptionPane();</p><p> op1.showMessageDialog(null, "用戶名或密碼不能為空");</p><p><b> } e
94、lse {</b></p><p> strServerIp = txtServer.getText();</p><p><b> login();</b></p><p><b> }</b></p><p><b> }</b></p>
95、<p> if (source.equals(btnRegister)) {</p><p> strServerIp = txtServer.getText();</p><p> this.dispose();</p><p> new Register(strServerIp);</p><p><b>
96、}</b></p><p> if (source == btnExit) {</p><p> System.exit(0);</p><p><b> }</b></p><p> } // actionPerformed()結(jié)束</p><p> public void
97、 login() {</p><p> try{data_test dt=new data_test();</p><p> Statement st=dt.oneConnection.createStatement();</p><p> String sql="select* from peopleMessege";</p>
98、<p> //st.executeQuery(sql);</p><p> ResultSet es=st.executeQuery(sql);</p><p> }catch(Exception e){</p><p><b> }</b></p><p><b> }</b&g
99、t;</p><p> new ChatRoom(getTitle(), strServerIp);</p><p> }public static void main(String args[]) {</p><p> new Login();</p><p><b> }</b></p>&l
100、t;p><b> } </b></p><p> 聊天界面與功能代碼:</p><p> import java.awt.*;</p><p> import java.awt.event.*;</p><p> import java.util.EventListener;</p><
101、;p> import java.io.*;</p><p> import java.net.*;</p><p> public class ClientFrame extends Frame implements ActionListener{</p><p> //窗體應該有發(fā)送按鈕、文本框用來輸入東西、List列表用來顯示信息</p>
102、;<p> Button connectbutton=new Button("連接");</p><p> Button sendbutton=new Button("發(fā)送");</p><p> TextField userid=new TextField(10);</p><p> TextField
103、 myid=new TextField(10);</p><p> List list =new List();</p><p> TextField content=new TextField(20);</p><p> TextField servername=new TextField(20);</p><p> Label l
104、abel=new Label("服務器地址:");</p><p> Label labe2=new Label("聊 天 信 息:");</p><p> Label labe3=new Label("好 友 賬 號:");</p><p> Label labe4=new Label("
105、;本 人 賬 號:");</p><p> Socket socket;</p><p> public ClientFrame(){</p><p> super("聊天窗體");</p><p> sendbutton.addActionListener(this);</p><p
106、> connectbutton.addActionListener(this);</p><p> Panel p1=new Panel();</p><p> p1.add(labe4);</p><p> p1.add(myid);</p><p> p1.add(label);</p><p>
107、 p1.add(servername);</p><p> p1.add(connectbutton);</p><p> Panel p2=new Panel();</p><p> p2.add(labe3);</p><p> p2.add(userid);</p><p> p2.add(labe2)
108、;</p><p> p2.add(content);</p><p> p2.add(sendbutton);</p><p> sendbutton.setEnabled(false);</p><p> Panel p3=new Panel();</p><p> p3.setLayout(new Bo
109、rderLayout());</p><p> p3.add("South",p2);</p><p> p3.add(list);</p><p> this.add("South",p1);</p><p> this.add(p3);</p><p> this.
110、setSize(600,600);</p><p><b> }</b></p><p> public void actionPerformed(ActionEvent e) {</p><p> if(e.getSource()==connectbutton){//連接服務器按鈕作用是連接服務器</p><p>
111、;<b> //連接服務器</b></p><p><b> try{</b></p><p> socket=new Socket(servername.getText(),9000);</p><p> //必須馬上發(fā)一個消息,表明自己的身份</p><p><b> try
112、{</b></p><p> OutputStream out=socket.getOutputStream();</p><p> PrintWriter pw=new PrintWriter(out,true);//強制把流寫出來</p><p> pw.println("**" + myid.getText()); //使
113、用特殊符號,表明這是該用戶第一次發(fā)送消息</p><p> myid.setEnabled(false);</p><p> servername.setEnabled(false);</p><p> sendbutton.setEnabled(true);</p><p> }catch(Exception ex)</p&g
114、t;<p><b> {</b></p><p> ex.printStackTrace();</p><p><b> }</b></p><p> connectbutton.setEnabled(false);</p><p> javax.swing.JOpti
115、onPane.showMessageDialog(this,"連接成功");</p><p> //啟動接收線程,并把輸入流和list列表同時交給線程</p><p> new ClientReceiveThread(socket.getInputStream(),list).start();</p><p><b> }<
116、/b></p><p> catch(Exception ex){</p><p> javax.swing.JOptionPane.showMessageDialog(this,"連接服務器失敗");</p><p> ex.printStackTrace();</p><p><b> }<
117、;/b></p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> //發(fā)送信息, 需要添加對方的賬號信息</p><p><b> try{&l
118、t;/b></p><p> OutputStream out=socket.getOutputStream();</p><p> PrintWriter pw=new PrintWriter(out,true);</p><p> pw.println(userid.getText() +":"+ content.getText(
119、));</p><p> list.add("本人 :"+content.getText()+"\t");</p><p> content.setText("");</p><p> }catch(Exception ex)</p><p><b> {</
120、b></p><p> ex.printStackTrace();</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b
121、></p><p> import java.awt.*;</p><p> import java.io.*;</p><p> import java.net.*;</p><p> public class ClientReceiveThread extends Thread{</p><p>
122、InputStream in;</p><p> List list;</p><p> public ClientReceiveThread(InputStream in,List list){</p><p> //在下面完成參數(shù)傳遞</p><p> this.in=in;</p><p> this.
123、list=list;</p><p><b> }</b></p><p> public void run(){</p><p><b> try{</b></p><p> BufferedReader br=new BufferedReader(new InputStreamReade
124、r(in));</p><p> while(true){</p><p> String str=br.readLine();//得不到值會阻塞</p><p> list.add(str);//得到的信息往窗體上的list里寫,list會自動更新顯示</p><p><b> }</b></p>
125、<p> }catch(Exception e){}</p><p><b> }</b></p><p><b> }</b></p><p> import java.awt.*;</p><p> import java.io.*;</p><p&g
126、t; import java.net.*;</p><p> public class ClientReceiveThread extends Thread{</p><p> InputStream in;</p><p> List list;</p><p> public ClientReceiveThread(InputS
127、tream in,List list){</p><p> //在下面完成參數(shù)傳遞</p><p> this.in=in;</p><p> this.list=list;</p><p><b> }</b></p><p> public void run(){</p>
128、<p><b> try{</b></p><p> BufferedReader br=new BufferedReader(new InputStreamReader(in));</p><p> while(true){</p><p> String str=br.readLine();//得不到值會阻塞</
129、p><p> list.add(str);//得到的信息往窗體上的list里寫,list會自動更新顯示</p><p><b> }</b></p><p> }catch(Exception e){}</p><p><b> }</b></p><p><b&g
130、t; }</b></p><p> import java.io.*;</p><p> import java.net.*;</p><p> import java.util.*;</p><p> public class QQServer{</p><p> public static
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- java課程設計---聊天室系統(tǒng)
- java課程設計--聊天室系統(tǒng)
- java課程設計-聊天程序
- 基于java即時聊天系統(tǒng)設計與實現(xiàn)-
- java課程設計聊天小程序
- java網(wǎng)絡聊天室課程設計
- java課程設計報告--聊天小程序
- java課程設計---java聊天室的系統(tǒng)的設計與開發(fā)
- 基于java技術的即時聊天系統(tǒng)實現(xiàn)
- java課程設計--簡單的網(wǎng)絡聊天程序
- 網(wǎng)絡編程課程設計-java聊天室
- 局域網(wǎng)聊天程序java課程設計
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設計報告
- java課程設計之簡單聊天室
- java課程設計報告---利用java實現(xiàn)簡單聊天室
- 基于java的局域網(wǎng)聊天系統(tǒng)-課程設計報告
- java課程設計報告--利用java設計簡單聊天對話框
- java課程設計---java聊天室的系統(tǒng)的設計與開發(fā)(含代碼)
- java課程設計---java聊天室的系統(tǒng)的設計與開發(fā)(含代碼)
- 畢業(yè)論文 基于java即時聊天系統(tǒng)的設計與實現(xiàn)
評論
0/150
提交評論