Java源代碼聊天室_第1頁
Java源代碼聊天室_第2頁
Java源代碼聊天室_第3頁
已閱讀5頁,還剩15頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Java聊天室希M乍人:楊永生制作時間:目錄1本文簡介12聊天室截圖與說明22.1用Java編譯:22.2服務(wù)器登錄界面22.3服務(wù)器窗口 22.4客服端登錄界面32.5客服端窗口 33服務(wù)器端63.1MyServer(>方法 63.2Login(>方法 93.3Time(> 方法 124客戶端134.1MyClie nt(> 方法 134.2Logi n(> 方法 164 3Time(>方法 191 本文簡介這是一個簡單的 Java聊天室,僅提供給一些剛學(xué) Java的學(xué)生做實驗,本文也是僅供參考 本文代碼都有注釋,希望讀者能讀懂代碼,本實驗內(nèi)部還有一些錯誤

2、 ,比如只能一條一條 的發(fā)信息,不能連發(fā),希望能解決本問題的朋友能給我發(fā)信息 ,我的QQ號就是百度號!2聊天室截圖與說明2.1用Java編譯:本代碼有七個類,放在六個java文件中,類名在下方希望讀者自己觀看2.2服務(wù)器登錄界面要先運行服務(wù)器端的程序用戶名:y密碼:1用戶名密碼可以自己設(shè)定點擊確定可以登錄,2秒后到服務(wù)端界面2.3服務(wù)器窗口2.4客服端登錄界面疋 To MLDN回 I,Welcome To MLDN用戶窖:|密碼:和服務(wù)器端的登錄一樣2.5客服端窗口當(dāng)?shù)卿浬虾罂头司惋@示已經(jīng)連接了 ,此時服務(wù)器端的窗口如下因為本程序設(shè)計的不是很完整,具體的聊天要先從客服端開始:在客服端輸入一條

3、聊天內(nèi)容后按確定,在服務(wù)器端就可以收到信息,之后客戶端不能輸 入了,要等待服務(wù)器端來信息后才能繼續(xù)輸入信息想要結(jié)束聊天,直接可以關(guān)閉窗口 ,也可以輸入'ye '后斷開聊天有興趣的朋友可以繼續(xù)完善本實驗程序3服務(wù)器端3.1 MyServer( 方法/服務(wù)器端代碼import java.awt.*。import java.awt.eve nt.Acti on Eve nt。import java.awt.eve nt.Acti on Liste ner。import java.i o.ln putStreamReade。import java.io.Pri ntWriter。imp

4、ort java .n et.ServerSocketimport java .n et.Socket。import javax.swi ng.*。public class MyServer 窗體實現(xiàn)類protected JLabel lab1Q全體變量,做傳遞的一個組件String s="已經(jīng)成功連接"。初始字符串,在兩個聊天窗口鏈接成功時輸出,同 時作為兩個窗口傳遞字符的一個變量構(gòu)造方法public MyServer(try/異常處理tryJFrame frame=new JFrame服務(wù)器窗口 "。/設(shè)置窗體frame.setLayout(nu 11。讓布局

5、管理器為空,使用絕對定位Font fnt=new Font("Serief',Font.PLAIN,40。/字體設(shè)置 Font fnt1= new Font("Serief",Font.PLAIN,20。/字體設(shè)置我的用戶名顯示JLabel lab1= new JLabel("服務(wù)器名:",JLabel.LEFT。/標簽實例化,文本左對齊lab1.setBou nds(8, 10, 100, 20設(shè)置組件位置及大小frame.add(lab1。/ 添加組件JTextField text2=new JTextField(30鼻 /單行文本

6、輸入組件 text2.setBounds(150, 10, 200, 20 設(shè)置組件位置及大小 text2.setEnabled(false /文本條不可編輯 text2.setText('笑笑聊天室"。輸入內(nèi)容 text2.setFont(fnt1。設(shè)置字體 frame.add(text2。添加組件/服務(wù)器IP顯示JLabel lab2=new JLabel("當(dāng)前服務(wù)器 IP:",JLabel.LEFT。/標簽實 例化,文本左對齊lab2.setBounds(8, 45, 100, 20 /設(shè)置組件位置及大小 frame.add(lab2。添加組件JT

7、extField text3=new JTextField(30 /單行文本輸入組件 text3.setBounds(150, 45, 200, 20 設(shè)置組件位置及大小 text3.setE nabled(false/ 文本不可編輯text3.setText(""。輸入內(nèi)容text3.setFont(fnt1。 /設(shè)置字體 frame.add(text3。 /添加組件 /服務(wù)器端口顯示JLabel Iab3=new JLabel("當(dāng)前服務(wù)器端口 :",JLabel.LEFT。/標簽 實例化 ,文本左對齊lab3.setBounds(

8、8, 80, 100, 20。 /設(shè)置組件位置及大小frame.add(lab3。 /添加組件JTextField text4=new JTextField(30。 /單行文本輸入組件 text4.setBounds(150, 80, 200, 20。 /設(shè)置組件位置及大小 text4.setEnabled(false。 /文本不可編輯 text4.setText("8888"。 /輸入內(nèi)容 text4.setFont(fnt1。 /設(shè)置字體 frame.add(text4。 /添加組件/聊天記錄顯示JLabel Iab4=new JLabeI("聊天記錄如下:&

9、quot;,JLabeI.LEFT。/ 標簽實 例化,文本左對齊lab4.setBounds(8, 115, 100, 20。 /設(shè)置組件位置及大小 frame.add(lab4。 /添加組件final JTextArea text1=new JTextArea(。 /多行文本輸入組件text1.setEnabled(false。 /文本不可編輯text1.setLineWrap(true。 /自動換行JScrollPanescr=newJScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.H ORIZONTAL

10、_SCROLLBAR_ALWAYS 。/設(shè)置滾動條 ,水平和垂直滾動條始終顯示scr.setBounds(8, 150, 450, 350。 /設(shè)置組件位置及大小 frame.add(scr。 /添加組件/聊天輸入窗口及確定JLabel lab5=new JLabel("請輸入聊天內(nèi)容:",JLabel.LEFT。/標簽 實例化 ,文本左對齊lab5.setBounds(8, 500, 100, 20。 /設(shè)置組件位置及大小 frame.add(lab5。 /添加組件final JTextArea text5=new JTextArea(。 /多行文本輸入組件text5.s

11、etLineWrap(true。 /自動換行JScrollPanescr2=newJScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS 。 /設(shè)置滾動條 ,水平和垂直滾動條始終 顯示scr2.setBounds(150, 500, 300, 50。 /設(shè)置組件位置及大小 frame.add(scr2。 /添加組件final JButton but=new JButton(”確定"。/設(shè)置確定按鈕 but.setFont(fnt。 /添加字體設(shè)置bu

12、t.setBounds(480, 500, 200, 50。 /設(shè)置組件位置及大小 but.addActionListener(new ActionListener( /采用內(nèi)部匿名類 public void actionPerformed(ActionEvent e if(e.getSource(=but /判斷觸發(fā)器源是否是提交 按鈕text1.append(" 笑 笑 : "+lab10.getText(+"n"。 /在聊天記錄上添加文本/將輸text1.append(text5.getText(+"n"。入的聊天內(nèi)容輸出在聊天

13、記錄上s=text5.getText(。/ 得到聊天內(nèi)容text5.setText(""。/ 將聊天窗口內(nèi)容設(shè)置為空 。frame.add(but。 /添加組件/當(dāng)前時間顯示JLabel Iab7=new JLabel("時間顯示:",JLabel.LEFT。 標簽實例化, 文本左對齊lab7.setBounds(450, 20, 100, 20。 /設(shè)置組件位置及大小 frame.add(lab7。 /添加組件DateFormat df=DateFormat.getDateTimelnstance( /取得系統(tǒng)時間String df2= df.form

14、at(new Date(。/將時間轉(zhuǎn)換成字符串JLabel lab8=new JLabel(df2,JLabel.LEFT。 /標簽實例化,文本左對 齊lab8.setBounds(520, 20, 130, 20。 /設(shè)置組件位置及大小 frame.add(lab8。 /添加組件lab10=lab8。/傳遞時間顯示 ,以便能在聊天記錄上顯示記錄時間new Time(lab8。/使時間動態(tài)顯示/用戶列表顯示JLabel lab6=new JLabel("用戶列表:",JLabel.LEFT。 標簽實例化, 文本左對齊lab6.setBounds(500, 40, 100,

15、20。 /設(shè)置組件位置及大小 frame.add(lab6。 /添加組件JTextArea text6=new JTextArea(。 /標簽實例化 ,文本左對齊 text6.setEnabled(false。 /文本不可編輯 text6.setLineWrap(true。 /自動換行JScrollPanescr3=newJScrollPane(text6,JScrollPane.VERTlCAL_SCROLLBAR_ALWAYS,JScrollPane.H ORlZONTAL_SCROLLBAR_ALWAYS 。 /設(shè)置滾動條 ,水平和垂直滾動條始終 顯示scr3.setBounds(460

16、, 70, 220, 420。 /設(shè)置組件位置及大小frame.add(scr3。 /添加組件 /窗口的屬性frame.setSize(700,600。 /窗口大小 frame.getContentPane(.setBackground(Color.pink。 / 窗口 的背景 顏色frame.setDefaultCloseOperation(JFrame.EXlT_ON_CLOSE。 /關(guān)閉 窗口時關(guān)閉程序frame.setLocation(100,50。 /在電腦桌面上出現(xiàn)的位置 frame.setVisible(true。 /顯示窗口/連個窗口連接/建立Server Socket并等待連

17、接請求ServerSocket server =new ServerSocket(8889Socket socket=server.accept(>連接建立,通過Socket獲取連接上的輸入/輸出流BufferedReaderin=newBufferedReader(newIn putStreamReader(socket.getl nputStream(>>>final PrintWriter out =new PrintWriter(socket.getOutputStream(>>。 /先讀取 Client 發(fā)送的數(shù)據(jù),然后從標準輸入讀取數(shù)據(jù)發(fā)送給 C

18、lient 當(dāng)接收 到 bye 時關(guān)閉連接String s1="",s2="" 。 /標志字符串 ,作為傳遞字符串使用 while(!(s1=in.readLine(>>.equals("bye">> /得到其他窗口傳遞的字符 串,并判斷是否結(jié)束text6.setText(可可在線">。/當(dāng)連接成功是在用戶列表中 輸出用戶名字if(!s1.equals("">>/如果傳遞的字符串不為空textl.append(” 可 可:"+lab10.getText(

19、>+"n ">。 /在聊天記錄上添加文本text1.append(s1+"n">。/ 將輸入的聊天內(nèi)容輸出在聊天記錄上s2=s。 /將在聊天窗口中得到的字符串傳遞給輸出字符串for(。s2.equals("">|s2.equals(null>。s2=s>當(dāng)傳遞的字符串為空時等 待用戶輸入聊天內(nèi)容s=""。 /將在聊天窗口中得到的字符串設(shè)為空 if(!s2.equals("">&&!s2.equals(null>>/ s2 不為

20、空時做 out.println(s2>。/向其他窗口輸出字符串 out.flush(>。 /輸出聊天內(nèi)容/關(guān)閉連接in.close(>。 out.close(>。socket.close(>。server.close(>。 catch(Exception e>/main 函數(shù)public static void main(String args> new Login(>。/登錄實現(xiàn) 3.2 Login(> 方法import java.awt.event.WindowAdapter 。 import java.awt.event.Act

21、ionListener 。 import java.awt.event.WindowEvent 。 import java.awt.event.ActionEvent 。 import java.awt.Color 。import java.awt.Font 。 。 import javax.swing.JButton 。 import javax.swing.JLabel 。 import javax.swing.JTextField 。 。 /用戶名和密碼設(shè)置class Logi nCheck設(shè)置登錄密碼private String name。 /用戶名private String pas

22、sword。 /密碼/構(gòu)造方法public LoginCheck(String name,String password> = name。 /傳遞用戶名 this.password = password。 /傳遞密碼/驗證用戶名和密碼public boolea n validate(> 驗證方法 if("y".equals(name>&&"1".equals(password>> / 判斷用戶名和密碼 是否正確return true 。 /返回 trueelsereturn false。 /

23、返回 false。/登錄窗口class Logi n登錄類名boolean f=false。 /按登錄時設(shè)置的一個標志private JFrame frame = new JFrame("Welcome To MLDN">。 /設(shè)置窗體private JButton submit = new JButton("登陸">。/設(shè)置登錄按鈕private JButton reset = new JButton(重置">。/設(shè)置重置按鈕private JLabel nameLab = new JLabel(服務(wù)器:">

24、。/標簽實例化 private JLabel passLab = new JLabel(密 碼:"。標簽實例化 private JLabel infoLab = new JLabel('服務(wù)器登陸系統(tǒng)">。標簽實例化 private JTextField nameText = new JTextField(10>。 /單行文本輸入條 private JPasswordField passText = new JPasswordField(>。 /單行密碼文本 輸入條public Login(>/ 登錄窗口構(gòu)造方法Font fnt = new

25、Font("Serief",Font.ITALIC + Font.BOLD,12> 。 /設(shè)置 字體infoLab.setFont(fnt> 。/ 設(shè)置標簽的顯示文字submit.addActionListener(new ActionListener(> /采用內(nèi)部匿名類 public void actionPerformed(ActionEvent e> if(e.getSource(>=submit> /判斷觸發(fā)器源是否是提交按鈕String tname = nameText.getText(>。 /得到輸入的用戶名Strin

26、g tpass = newString(passText.getPassword(>>。 / 得到輸入的密碼 ,此時通過 getPassageword(> 方法返回的是字符數(shù)組LoginCheck log = newLoginCheck(tname,tpass>。 /實例化 LoginCheck 對象,傳入輸入的用戶名和密碼 if(log.validate(>>/ 對用戶名和密碼進行驗證 try/ 線程異常處理 tryThread.sleep(2000>。 /2 秒后 打開聊天窗口f=true。/ 登錄成功后的表示項為 trueframe.dispos

27、e(>。/ 關(guān)閉本窗口catch(Exception ee>/ 異常獲取elsein foLab.setText(”登陸失敗,錯誤的用戶名或密碼! "> 。/登錄失敗> 。reset.addActionListener(new ActionListener(> /采用內(nèi)部匿名類 public void actionPerformed(ActionEvent e> if(e.getSource(>=reset> /判斷觸發(fā)器源是否是提交 按鈕nameText.setText("">。/設(shè)置文本框中的內(nèi)容 pass

28、Text.setText("">。 /設(shè)置文本框中的內(nèi)容 infoLab.setText("服務(wù)器登陸系統(tǒng)">。/恢復(fù) 標簽顯示> 。frame.addWi ndowListe ner(new Win dowAdapter(> 加入窗口監(jiān)聽 public void windowClosing(WindowEvent e> > 。/ 加入事件frame.setLayout(null> 。 /使用絕對定位nameLab.setBounds(5,5,60,20>。 /設(shè)置標簽的位置及大小 passLab.setB

29、ounds(5,30,60,20>。 /設(shè)置標簽的位置及大小 infoLab.setBounds(5,65,220,30>。 /設(shè)置標簽的位置及大小 nameText.setBounds(65,5,100,20>。 /設(shè)置文本域的位置及大小 passText.setBounds(65,30,100,20>。 /設(shè)置密碼域的位置及大小 submit.setBounds(165,5,60,20>。 /設(shè)置按鈕的位置及大小 reset.setBounds(165,30,60,20>。 /設(shè)置按鈕的位置及大小 frame.add(nameLab>。 /向窗體加

30、入標簽frame.add(passLab>。 /向窗體加入標簽 frame.add(infoLab> 。/向窗體加入標簽 frame.add(nameText>。/向窗體加入文本框 frame.add(passText>。 /向窗體加入密碼框 frame.add(submit> 。 /向窗體加入按鈕 frame.add(reset>。 /向窗體加入按鈕 frame.setSize(280,130>。 /設(shè)置窗體大小 frame.getContentPane(>.setBackground(Color.green>。 /設(shè)置窗體的 背景顏色f

31、rame.setLocation(300,200>。 /設(shè)置窗體在電腦桌面上的位置frame.setVisible(true>。 /顯示窗口while(f=false> / 當(dāng)?shù)卿浭r ,一直循環(huán)運行 ,new MyServer(>。 /顯示窗體頁面3.3 Time(> 方法。/時間類 public class Time public Time(JLabel time> /構(gòu)造方法this.setTimer(time>。 /設(shè)置時間public void setTimer(JLabel time> /設(shè)置時間方法final JLabel var

32、Time = time。/傳遞組件Timer timeAction = new Timer(1000, new ActionListener(> /時間監(jiān)聽 public void actionPerformed(ActionEvent e> long timemillis = System.currentTimeMillis(> 。/得到系統(tǒng)時間SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss">。/轉(zhuǎn)換日期顯示格式varTime.setText(df.format(ne

33、w Date(timemillis>>>。/輸出得到的時間> 。timeAction.start(>。/開啟線程4客戶端4.1 MyClient( 方法import java.awt.*。import java.awt.eve nt.Acti on Eve nt。import java.awt.eve nt.Acti on Liste ner。import java.i o.ln putStreamReade。import java.io.Pri ntWriter。import java .n et.Socket。import javax.swi ng.*。pub

34、lic class MyClie ntprotected JLabel lab10 全體變量,做傳遞的一個組件String s="連接成功"。/初始字符串,在兩個聊天窗口鏈接成功時輸出,同時 作為兩個窗口傳遞字符的一個變量/構(gòu)造方法public MyClie nt(JFrame frame=new JFrame(用戶端窗口 "。設(shè)置窗體frame.setLayout(nu 11。讓布局管理器為空,使用絕對定位Font fnt=new Font("Serief',Font.PLAIN,40。/字體設(shè)置 Font fnt1= new Font(&qu

35、ot;Serief",Font.PLAIN,20。/字體設(shè)置 我的用戶名顯示JLabel lab仁new JLabel("服務(wù)器名:",JLabel.LEFT。/標簽實例化,文本左對齊lab1.setBou nds(8, 10, 100, 20設(shè)置組件位置及大小frame.add(lab1。/ 添加組件JTextField text2=new JTextField(30鼻 /單行文本輸入組件 text2.setBounds(150, 10, 200, 20 設(shè)置組件位置及大小 text2.setEnabled(false /文本條不可編輯 text2.setTex

36、t('可可聊天室"。輸入內(nèi)容 text2.setFont(fnt1。設(shè)置字體 frame.add(text2。添加組件/服務(wù)器IP顯示JLabel lab2=new JLabel("當(dāng)前服務(wù)器 IP:",JLabel.LEFT。/標簽實 例化,文本左對齊lab2.setBounds(8, 45, 100, 20 /設(shè)置組件位置及大小 frame.add(lab2。添加組件JTextField text3=new JTextField(30 /單行文本輸入組件 text3.setBounds(150, 45, 200, 20 設(shè)置組件位置及大小 text3.

37、setE nabled(false/ 文本不可編輯text3.setText(""。輸入內(nèi)容 text3.setFont(fnt1。設(shè)置字體 frame.add(text3。添加組件/服務(wù)器端口顯示JLabel Iab3=new JLabel("當(dāng)前服務(wù)器端口 :",JLabel.LEFT。/標簽實例化 ,文本左對齊lab3.setBounds(8, 80, 100, 20。 /設(shè)置組件位置及大小frame.add(lab3。 /添加組件JTextField text4=new JTextField(30。 /單行文本輸入組件 text

38、4.setBounds(150, 80, 200, 20。 /設(shè)置組件位置及大小 text4.setEnabled(false。 /文本不可編輯 text4.setText("8888"。 /輸入內(nèi)容 text4.setFont(fnt1。 /設(shè)置字體 frame.add(text4。 /添加組件/聊天記錄顯示JLabel Iab4=new JLabeI("聊天記錄如下:",JLabeI.LEFT。/ 標簽實例化,文本左對齊lab4.setBounds(8, 115, 100, 20。 /設(shè)置組件位置及大小 frame.add(lab4。 /添加組件fi

39、nal JTextArea text1=new JTextArea(。 /多行文本輸入組件text1.setEnabled(false。 /文本不可編輯text1.setLineWrap(true。 /自動換行JScrollPanescr=newJScrollPane(text1,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.H ORIZONTAL_SCROLLBAR_ALWAYS 。/設(shè)置滾動條 ,水平和垂直滾動條始終顯示scr.setBounds(8, 150, 450, 350。 /設(shè)置組件位置及大小 frame.add(scr。 /

40、添加組件/聊天輸入窗口及確定JLabel lab5=new JLabel("請輸入聊天內(nèi)容:",JLabel.LEFT。/標簽實例化 ,文本左對齊lab5.setBounds(8, 500, 100, 20。 /設(shè)置組件位置及大小 frame.add(lab5。 /添加組件final JTextArea text5=new JTextArea(。 /多行文本輸入組件text5.setLineWrap(true。 /自動換行JScrollPanescr2=newJScrollPane(text5,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JS

41、crollPane.HORIZONTAL_SCROLLBAR_ALWAYS 。 /設(shè)置滾動條 ,水平和垂直滾動條始終 顯示scr2.setBounds(150, 500, 300, 50。 /設(shè)置組件位置及大小 frame.add(scr2。 /添加組件final JButton but=new JButton(”確定"。/設(shè)置確定按鈕 but.setFont(fnt。 /添加字體設(shè)置but.setBounds(480, 500, 200, 50。 /設(shè)置組件位置及大小 but.addActionListener(new ActionListener( /采用內(nèi)部匿名類 public

42、 void actionPerformed(ActionEvent e if(e.getSource(=but /判斷觸發(fā)器源是否是提交 按鈕text1.append(" 可 可 : "+lab10.getText(+"n "。 /在聊天記錄上添加文本text1.append(text5.getText(+"n"。 /將 輸入的聊天內(nèi)容輸出在聊天記錄上s=text5.getText(。/得到聊天內(nèi)容 。frame.add(but。 /添加組件/當(dāng)前時間顯示JLabel Iab7=new JLabel("時間顯示:"

43、,JLabel.LEFT。 標簽實例化, 文本左對齊lab7.setBounds(450, 20, 100, 20。 /設(shè)置組件位置及大小 frame.add(lab7。 /添加組件DateFormat df=DateFormat.getDateTimelnstance( /取得系統(tǒng)時間String df2= df.format(new Date(。/將時間轉(zhuǎn)換成字符串JLabel lab8=new JLabel(df2,JLabel.LEFT。 /標簽實例化,文本左對 齊lab8.setBounds(520, 20, 130, 20。 /設(shè)置組件位置及大小 frame.add(lab8。 /

44、添加組件lab10=lab8。 /傳遞時間顯示 ,以便能在聊天記錄上顯示記錄時間new Time(lab8。/使時間動態(tài)顯示/用戶列表顯示JLabel lab6=new JLabel("用戶列表:",JLabel.LEFT。 標簽實例化, 文本左對齊lab6.setBounds(500, 40, 100, 20。 /設(shè)置組件位置及大小 frame.add(lab6。 /添加組件JTextArea text6=new JTextArea(。 /標簽實例化 ,文本左對齊 text6.setEnabled(false。 /文本不可編輯 text6.setLineWrap(true

45、。 /自動換行JScrollPanescr3=newJScrollPane(text6,JScrollPane.VERTlCAL_SCROLLBAR_ALWAYS,JScrollPane.H ORlZONTAL_SCROLLBAR_ALWAYS 。 /設(shè)置滾動條 ,水平和垂直滾動條始終 顯示scr3.setBounds(460, 70, 220, 420。 /設(shè)置組件位置及大小frame.add(scr3。 /添加組件/窗口的屬性frame.setSize(700,600。 /窗口大小 frame.getContentPane(.setBackground(Color.pink。 / 窗口 的

46、背景 顏色frame.setDefaultCloseOperation(JFrame.EXlT_ON_CLOSE。 /關(guān)閉 窗口時關(guān)閉程序frame.setLocation(10,10。 /在電腦桌面上出現(xiàn)的位置 frame.setVisible(true。 /顯示窗口try /try 異常處理Socket socket=new Socket("",8889。/發(fā)出連接請求建立連接,通過Socket獲得連接上的輸入/輸出流PrintWriter out =new PrintWriter(socket.getOutputStream(。BufferedRea

47、der in = new BufferedReader( newIn putStreamReader(socket.getl nputStream(從標準輸入中讀取一行,發(fā)送 Server端,當(dāng)用戶輸入bye時結(jié)束連接dowhile(s.equals("">|s.equals(null>>/ 當(dāng)傳遞的字符串為空 時等待用戶輸入聊天內(nèi)容 if(!s.equals("">&&!s.equals(null>>/s 不為空時做out.println(s>。/ 向其他窗口輸出字符串s=""

48、;。/ 將在聊天窗口中得到的字符串設(shè)為空out.flush(>。 / 輸出聊天內(nèi)容 if(!s.equals("bye">> / 判斷聊天是否結(jié)束String s3。 / 得到其他窗口傳來的字符串while( (s3=in.readLine(>>.equals("n">&&s3.equals(null>&&s3.equals("">>/ 判斷 s3 是否為空 ,為空時等待text6.setText(笑笑在線">。/當(dāng)連接成功是在用戶列

49、表中輸出用戶名字if(!s3.equals("n">&&!s3.equals(null>&&!s3.equals("">>/s3 不為空時做textl.append(”笑笑:"+lab10.getText(>+"n ">。 /在聊天記錄上添加文本text1.append(s3+"n">。/ 將輸入的聊天內(nèi)容輸出在聊天記錄上 while(!s.equals("bye">> 。 /判斷是否結(jié)束/關(guān)閉連接o

50、ut.close(>。in.close(>。 socket.close(>。catch(Exception e>/main 函數(shù)public static void main(String args>new Login(>。 /登錄實現(xiàn)4.2 Login(> 方法import java.awt.event.WindowAdapter 。 import java.awt.event.ActionListener 。import java.awt.event.WindowEvent 。 import java.awt.event.ActionEvent 。

51、 import java.awt.Color 。import java.awt.Font 。 。 import javax.swing.JButton 。 import javax.swing.JLabel 。 import javax.swing.JTextField 。 。 /用戶名和密碼設(shè)置class Logi nCheck設(shè)置登錄密碼private String name。 /用戶名private String password。 /密碼/構(gòu)造方法public LoginCheck(String name,String password> = name。 /傳遞

52、用戶名 this.password = password。 /傳遞密碼/驗證用戶名和密碼public boolea n validate(> 驗證方法 if("y".equals(name>&&"1".equals(password>> / 判斷用戶名和密碼 是否正確return true 。 /返回 trueelse return false。 /返回 false。/登錄窗口class Logi n登錄類名boolean f=false。 /按登錄時設(shè)置的一個標志private JFrame frame = ne

53、w JFrame("Welcome To MLDN">。 /設(shè)置窗體private JButton submit = new JButton("登陸">。/設(shè)置登錄按鈕private JButton reset = new JButton(重置">。/設(shè)置重置按鈕private JLabel nameLab = new JLabel(用戶名:">。/標簽實例化 private JLabel passLab = new JLabel(密 碼:"。標簽實例化 private JLabel infoLab

54、= new JLabel("用戶登陸系統(tǒng)">。/標簽實例化 private JTextField nameText = new JTextField(10>。 /單行文本輸入條 private JPasswordField passText = new JPasswordField(>。 /單行密碼文本 輸入條public Login(>/ 登錄窗口構(gòu)造方法Font fnt = new Font("Serief",Font.ITALIC + Font.BOLD,12> 。 /設(shè)置 字體infoLab.setFont(fnt&

55、gt; 。/ 設(shè)置標簽的顯示文字submit.addActionListener(new ActionListener(> /采用內(nèi)部匿名類 public void actionPerformed(ActionEvent e> if(e.getSource(>=submit> /判斷觸發(fā)器源是否是提交按鈕String tname = nameText.getText(>。 /得到輸入的用戶名String tpass = new String(passText.getPassword(>>。 / 得到輸入的密碼 ,此時通過 getPassageword(> 方法返回的是字符數(shù)組LoginCheck log = newLoginCheck(tname,tpass>。 /實例化 LoginCheck 對象,傳入輸入的用戶名和密碼 if(log.validate(>>/ 對用戶名和密碼進行驗證 tryThread.sleep(2000>。 /2 秒后 打開聊天窗口f=true。/登錄成功后的表示項為 trueframe.dispose(

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論