java網(wǎng)絡(luò)聊天室課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩23頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p>  課 程 設(shè) 計(jì) 報(bào) 告</p><p>  課程名稱 Java網(wǎng)絡(luò)編程 </p><p>  課題名稱 java聊天室課程設(shè)計(jì) </p><p>  專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  班 級 計(jì)算機(jī)0803

2、 </p><p>  課 程 設(shè) 計(jì) 任 務(wù) 書</p><p>  課程名稱 Java網(wǎng)絡(luò)編程 </p><p>  課 題 java聊天室課程設(shè)計(jì) </p><p>  一 課程設(shè)計(jì)的任務(wù)和具體要求</p><p>  該項(xiàng)目實(shí)訓(xùn)的目的主要是對所學(xué)網(wǎng)絡(luò)知識進(jìn)行梳理、鞏固和提高。通過項(xiàng)目實(shí)訓(xùn)

3、熟悉系統(tǒng)開發(fā)的基本流程,掌握系統(tǒng)開發(fā)的各個(gè)環(huán)節(jié)的要點(diǎn),培養(yǎng)系統(tǒng)分析和設(shè)計(jì)的能力,鍛煉團(tuán)隊(duì)合作精神。</p><p><b>  具體要求:</b></p><p>  課程設(shè)計(jì)任務(wù)下達(dá)后,研究系統(tǒng)的功能、性能和界面要求,具體安排如下:</p><p>  1、下達(dá)項(xiàng)目實(shí)訓(xùn)任務(wù),進(jìn)行需求分析,形成需求分析報(bào)告。</p><p&

4、gt;  2、進(jìn)行總體設(shè)計(jì)和詳細(xì)設(shè)計(jì),形成詳細(xì)設(shè)計(jì)報(bào)告,進(jìn)行系統(tǒng)模塊開發(fā)。</p><p>  3、全部上機(jī)進(jìn)行系統(tǒng)模塊開發(fā)和模塊測試。</p><p>  4、系統(tǒng)集成和集成測試,撰寫系統(tǒng)操作說明書和項(xiàng)目實(shí)訓(xùn)總結(jié)報(bào)告。</p><p>  二 課程設(shè)計(jì)所需軟件、硬件等</p><p>  軟件:Windows 2000以上的操作系統(tǒng)、JDK

5、開發(fā)包、eclipse開發(fā)環(huán)境</p><p>  硬件:機(jī)房臺式計(jì)算機(jī)</p><p><b>  目 錄</b></p><p>  一 課程設(shè)計(jì)的目的……………………………………………1</p><p>  二 需求分析………………………………………………….2</p><p>  三 系

6、統(tǒng)設(shè)計(jì)………………………………………………….3</p><p>  四 詳細(xì)設(shè)計(jì)………………………………………………….5</p><p>  五 總結(jié)……………………………………………………….9</p><p>  六 參考文獻(xiàn).………………………………………………..10</p><p>  七 附錄(源代碼)………………………………

7、…………..11</p><p><b>  一、課程設(shè)計(jì)的目的</b></p><p>  通過此項(xiàng)目實(shí)訓(xùn)——JAVA聊天室的設(shè)計(jì),實(shí)踐、總結(jié)、回顧了網(wǎng)絡(luò)編程思想以及編程方法,并通過編寫程序來掌握J(rèn)ava語言編程技巧,將學(xué)習(xí)到的知識融會貫通,同時(shí)提高調(diào)試程序的能力,養(yǎng)成良好的編程習(xí)慣,并增強(qiáng)對程序設(shè)計(jì)整體思路的把握,理論與時(shí)間相結(jié)合。本文的主要工作集中在:該課程基于

8、C/S模式,客戶機(jī)向服務(wù)器發(fā)聊天請求,服務(wù)器應(yīng)答并能顯示客戶機(jī)發(fā)過來的信息。當(dāng)用戶聊天時(shí),將當(dāng)前用戶名、聊天對象、聊天,內(nèi)容、聊天語氣和是否私聊進(jìn)行封裝,然后與服務(wù)器建立Socket連接,再用對象輸出流包裝Socket的輸出流將聊天信息對象發(fā)送給服務(wù)器端。當(dāng)用戶發(fā)送聊天信息時(shí),服務(wù)端將會收到客戶端用Socket傳輸過來的聊天信息對象,然后將其強(qiáng)制轉(zhuǎn)換為Chat對象,接收用戶的聊天信息是由多線程技術(shù)實(shí)現(xiàn)的,因?yàn)榭蛻舳吮仨殨r(shí)時(shí)關(guān)注更新服務(wù)器

9、上是否有最新消息,當(dāng)每次用戶接收到聊天信息后將會開始分析聊天信息然后將適合自己的信息人性化地顯示在聊天信息界面上。</p><p>  進(jìn)一步培養(yǎng)學(xué)生面向?qū)ο蟪绦蛟O(shè)計(jì)的思想,加深對面向?qū)ο蟪绦蛟O(shè)計(jì)四大特性的理解,針對JAVA語言中的重點(diǎn)和難點(diǎn)內(nèi)容進(jìn)行訓(xùn)練,獨(dú)立完成有一定工作量的程序設(shè)計(jì)任務(wù),同時(shí)強(qiáng)調(diào)好的程序設(shè)計(jì)風(fēng)格。</p><p><b>  需求分析</b><

10、;/p><p>  隨著計(jì)算機(jī)網(wǎng)絡(luò)日新月異的發(fā)展,人們的交流方式越來越多,傳統(tǒng)的交流方式,如:信件、電報(bào)、電話等已經(jīng)難以滿足人們的交流要求,在互聯(lián)網(wǎng)上即時(shí)的和好友取得聯(lián)系,已經(jīng)成為當(dāng)今社會人們主流的聯(lián)系方式。因此,兩臺計(jì)算機(jī)之間進(jìn)行即時(shí)通訊、發(fā)送文件等交流方式已經(jīng)成為必然潮流。因此出現(xiàn)了QQ等聊天工具,然而QQ等聊天工具雖然方便、實(shí)用,但是,娛樂功能太多,有很多吸引人的娛樂功能,從一定程度上來說,是一種娛樂工具,不

11、能作為用于即時(shí)通訊、文件共享的專用工具。目前,用于實(shí)現(xiàn)單一的即時(shí)通訊、文件共享的軟件實(shí)在太少,而且,它們中大部分都是絕對的C/S模式,對遠(yuǎn)程服務(wù)器有非常大的依賴性,沒有徹底實(shí)現(xiàn)點(diǎn)對點(diǎn)的交流。為此,我們決定開發(fā)一個(gè)專用于實(shí)現(xiàn)兩臺計(jì)算機(jī)之間即時(shí)通訊、文件共享的軟件,以方便兩臺計(jì)算機(jī)之間信息的交流。本軟件屬于點(diǎn)對點(diǎn)連接的,在連接并通信時(shí),尤其是近程的即時(shí)通訊,徹底的脫離了遠(yuǎn)程的服務(wù)器,避免了和遠(yuǎn)程服務(wù)器連接時(shí)過多的浪費(fèi)網(wǎng)絡(luò)資源。并且避免了服務(wù)

12、器忙或與服務(wù)器無法連接時(shí),浪費(fèi)過多時(shí)間用于和服務(wù)器建立連接!因此,這個(gè)軟件是極具適應(yīng)性和實(shí)用性的即時(shí)通訊軟件.</p><p><b>  三、系統(tǒng)設(shè)計(jì)</b></p><p>  系統(tǒng)可以采用任何一種流行的,Java支持的數(shù)據(jù)庫,本系統(tǒng)采用了Microsoft公司的Access作為后臺數(shù)據(jù)庫。通過對現(xiàn)在流行的一些Icq的參考,建立數(shù)據(jù)庫,名為chart,數(shù)據(jù)庫共建立

13、一個(gè)表,表中基本信息包括編號,uername,password。</p><p>  (1)用戶的基本信息表(表名userlilst)</p><p>  序號字段名含義數(shù)據(jù)類型NULL</p><p>  1編號用戶的編號int</p><p>  2username用戶名文本</p><p>

14、;  3password用戶的密碼文本 </p><p>  其中編號字段為自動增加。 </p><p>  ◆ 服務(wù)器端程序如下: </p><p>  服務(wù)器與客戶間通過套接口Socket(TCP)連接。在java中使用套接口相當(dāng)簡單,Java API為處理套接口的通信提供了一個(gè)類java.net.Socket.,使得編寫網(wǎng)絡(luò)應(yīng)用程序相對容易.服務(wù)器采用

15、多線程以滿足多用戶的請求,通過JDBC與后臺數(shù)據(jù)庫連接,并通過創(chuàng)建一個(gè)ServerSocket對象來監(jiān)聽來自客戶的連接請求,默認(rèn)端口為8888,然后無限循環(huán)調(diào)用accept()方法接受客戶程序的連接。</p><p>  ◆ 客戶端程序如下 :</p><p>  客戶通過Socket(InetAddress,port)建立與服務(wù)器的連接。服務(wù)器與客戶都通過構(gòu)造BufferedReader

16、,PrintWriter來建立輸入輸出流,然后雙方通過該輸入輸出流來相互傳遞信息,一旦收到客戶方的連接請求,服務(wù)器accept()方法返回一個(gè)新建的Socket對象??蛻舳巳缓笙蚍?wù)器發(fā)送消息,比如登錄,服務(wù)器收到來自客戶的請求后,針對不同的消息處理請求, 雖然UDP不可靠但是對于icq可靠性并不太重要,而且UDP快速,所以客戶間發(fā)送信息通過UDP。用戶登錄時(shí)通過類DatagramPacket和DatagramSocket創(chuàng)建UDP包括

17、其本地接受端口以及發(fā)送端口。</p><p><b>  四、詳細(xì)設(shè)計(jì)</b></p><p>  圖1.1 :服務(wù)器端頁面</p><p>  圖1.2 :程序運(yùn)行界面</p><p>  圖1.3 :注冊頁面</p><p>  圖1.4 :登陸頁面</p><p> 

18、 圖1.5:網(wǎng)友1頁面</p><p>  圖1.6:網(wǎng)友2頁面</p><p>  圖1.7:網(wǎng)絡(luò)涂鴉板顏色面板</p><p>  圖1.8:聊天記錄面板</p><p>  圖1.9:數(shù)據(jù)庫頁面</p><p>  服務(wù)器端:(Windows平臺)首先應(yīng)有java環(huán)境jdk,建議采用jdk1.5。然后安裝Acce

19、ss數(shù)據(jù)庫,建立數(shù)據(jù)庫chart,并且建立表userlist。然后在控制面板中的ODBC數(shù)據(jù)源中設(shè)置用戶DSN數(shù)據(jù)源TrioMotors 建立與數(shù)據(jù)庫的連接。然后運(yùn)行程序即可。 </p><p>  客戶端:只要有有java環(huán)境jdk就可以建議jdk1.5。然后運(yùn)行程序及可。 </p><p><b>  五、 總結(jié)</b></p><p> 

20、 兩周的課程設(shè)計(jì)結(jié)束了,我的收獲很大。通過課程設(shè)計(jì)的編程和對編程過程中遇到的問題的思考,有效的提高了我對數(shù)據(jù)結(jié)構(gòu)的認(rèn)識和理解,切實(shí)的提高了我的編程能力,補(bǔ)全了我的不足。通過這次課程設(shè)計(jì),我鞏固所了學(xué)過的知識,能用JAVA熟練地運(yùn)用其中的一些,進(jìn)一步掌握了各個(gè)指令的功能是轉(zhuǎn)向。課程設(shè)計(jì)是對我們所學(xué)的這些東西一個(gè)綜合的運(yùn)用。在整個(gè)程序的編寫中,調(diào)試占了很大部分的時(shí)間。要想寫好程序,必須認(rèn)真對待代碼的每一個(gè)細(xì)節(jié),還必須熟練的掌握各種命令,這對

21、程序的調(diào)試是非常重要的。通過這次實(shí)際動手能力的培養(yǎng),我進(jìn)一步熟悉了使用方法,基本達(dá)到了能獨(dú)立閱讀、編制和調(diào)試一定規(guī)模的水平。課程設(shè)計(jì)是對自己所學(xué)知識掌握程度最好的檢驗(yàn),特別是對于一些細(xì)節(jié)問題??荚囘€并不能完全的說明什么,因?yàn)榭碱}都是一些單個(gè)的問題,大多只是知識的某一方面。而課程設(shè)計(jì)不同,我們要用到很多的單個(gè)知識點(diǎn),把他們綜合起來運(yùn)用到自己的課題當(dāng)中。學(xué)了一個(gè)學(xué)期的數(shù)據(jù)結(jié)構(gòu),現(xiàn)在終于迎來了課程設(shè)計(jì),當(dāng)然是一個(gè)很好的鍛煉自己的機(jī)會。<

22、/p><p>  在本次的課程設(shè)計(jì)也發(fā)現(xiàn)了自己很多的缺點(diǎn)不足之處,對于一些細(xì)節(jié)性的問題老犯錯,特別是一個(gè)標(biāo)點(diǎn)的錯誤,很急人。對于有些知識掌握的不行,有的是模模糊糊的不牢靠,雖然有的東西考試考過,但當(dāng)它用到實(shí)際問題的時(shí)候,往往不知道用哪,放哪。實(shí)踐出真知。課程設(shè)計(jì)是個(gè)實(shí)踐,雖然實(shí)際不長,但給我們對知識的運(yùn)用,利用都有了很好的發(fā)揮。人多力量大這句話是真理啊,不懂得地方問同學(xué),不會的地方也問同學(xué),自己努力的同時(shí)跟別人共同進(jìn)

23、步,這就是合作,學(xué)會合作是我們以后必備的重要的一項(xiàng)人際技能。一個(gè)程序的完成需要不斷地修改才能夠得到完善,人生正如那程序一樣,只有不斷地努力、奮斗、勇往直前,才能夠完善自己,做最好的自己。</p><p>  最后感謝同學(xué)的幫助,感謝老師的指導(dǎo)!</p><p><b>  六、參考文獻(xiàn)</b></p><p>  1.Java2實(shí)用教程(第三版

24、 ) 編著者 耿祥義 張躍平 清華大學(xué)出版社 2006</p><p>  2.Java編程設(shè)計(jì) 編著者 劉海杰 中國鐵道出版社 2006</p><p>  3.Java網(wǎng)絡(luò)編程精解 編著者 孫衛(wèi)琴 電子工業(yè)出版社 </p><p><b>  七、附錄</b></p><p><b>  服

25、務(wù)器端代碼:</b></p><p>  public static int port=8888;</p><p>  ServerSocket server;</p><p>  Socket client=null;</p><p>  BufferedReader cin=null;</p><p>

26、  PrintWriter cout=null;</p><p>  Thread chartThread=null;</p><p>  JButton runButton=new JButton("運(yùn)行");</p><p>  JButton stopButton=new JButton("停止");</p>

27、<p>  JButton exitButton=new JButton("退出");</p><p>  JButton messageButton=new JButton("發(fā)送消息");</p><p>  JTextField serMessage=new JTextField("",25);</p&g

28、t;<p>  JPanel p1=new JPanel();</p><p>  JPanel p2=new JPanel();</p><p>  JScrollPane messageScrollPane;</p><p>  JTextArea message=new JTextArea();</p><p>  boo

29、lean isRunning=false;</p><p>  public Server(){</p><p>  super("網(wǎng)絡(luò)聊天服務(wù)器");</p><p>  p1.add(runButton);</p><p>  p1.add(stopButton);</p><p>  p1.a

30、dd(exitButton);</p><p>  runButton.addActionListener(this);</p><p>  stopButton.addActionListener(this);</p><p>  exitButton.addActionListener(this);</p><p>  messageBu

31、tton.addActionListener(this);</p><p>  p2.add(serMessage);</p><p>  p2.add(messageButton);</p><p>  messageScrollPane=new JScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDE

32、D,</p><p>  JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);</p><p>  this.getContentPane().add(p1,"North");</p><p>  this.getContentPane().add(p2,"South");</p>

33、;<p>  this.getContentPane().add(messageScrollPane,"Center");</p><p>  this.setSize(400,300);</p><p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p> 

34、 this.setVisible(true);}</p><p>  public void actionPerformed(ActionEvent e)</p><p>  {if(e.getSource()==runButton){</p><p>  chartThread=new Thread(this);</p><p>  cha

35、rtThread.start();</p><p>  runButton.setVisible(false);</p><p>  message.append("服務(wù)器啟動"+"\n");</p><p>  }else if (e.getSource()==stopButton)</p><p>

36、<b>  {</b></p><p>  chartThread=null;</p><p>  runButton.setVisible(true);</p><p>  if(cout!=null) cout.println("stop");</p><p><b>  try{<

37、;/b></p><p>  if(server!=null) </p><p>  server.close();</p><p>  }catch(Exception exp){}</p><p>  message.append("服務(wù)器停止"+"\n");</p><p

38、>  }else if(e.getSource()==exitButton)</p><p><b>  {</b></p><p>  chartThread=null;</p><p>  if(cout!=null) cout.println("exit");</p><p>  Syst

39、em.exit(0);</p><p>  }else if (e.getSource()==messageButton)</p><p><b>  {</b></p><p>  if(chartThread!=null)</p><p><b>  {</b></p><p

40、>  sendMessage(serMessage.getText());</p><p>  message.append("發(fā)送:"+serMessage.getText()+"\n");</p><p><b>  }</b></p><p><b>  }</b><

41、;/p><p><b>  }</b></p><p>  public void run()</p><p><b>  {</b></p><p><b>  try{</b></p><p>  server=new ServerSocket(port

42、);</p><p>  while(chartThread!=null)</p><p><b>  {</b></p><p>  client=server.accept() ;</p><p>  cin=new BufferedReader(new InputStreamReader(client.getInp

43、utStream()));</p><p>  cout=new PrintWriter(client.getOutputStream(),true);</p><p>  String username;</p><p>  String password;</p><p>  username=cin.readLine();</p&

44、gt;<p>  password=cin.readLine();</p><p>  if(userOK(username,password))</p><p><b>  {</b></p><p>  message.append("客戶:"+username+"進(jìn)入\n");<

45、/p><p>  cout.println("ok");</p><p>  String aline;</p><p>  while((aline=cin.readLine() )!=null&&chartThread!=null)</p><p><b>  {</b></p&

46、gt;<p>  if(aline.equals("exit"))</p><p><b>  {</b></p><p>  message.append("客戶:"+username+"已退出!\n");</p><p><b>  break;</b

47、></p><p>  }else message.append(username+"說:"+aline+"\n");</p><p><b>  }</b></p><p>  }else cout.println("error");</p><p>

48、;<b>  }</b></p><p>  cin.close() ;</p><p>  cout.close() ;</p><p>  client.close() ;</p><p>  server.close();</p><p><b>  }</b><

49、/p><p>  catch(Exception e)</p><p><b>  {</b></p><p>  System.out.println(e);</p><p><b>  }</b></p><p><b>  }</b></p>

50、;<p>  public boolean userOK(String username,String password)</p><p><b>  {</b></p><p>  boolean ok=false;</p><p><b>  try {</b></p><p>&

51、lt;b>  //①加載驅(qū)動程序</b></p><p>  Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");</p><p><b>  }</b></p><p>  catch (ClassNotFoundException e) {</p>

52、<p>  //驅(qū)動程序加載不成功,打印錯誤信息并退出</p><p>  System.out.println("Can not find driver " );</p><p>  System.exit( -1);</p><p><b>  }</b></p><p>  Conne

53、ction con;</p><p><b>  try {</b></p><p>  //②獲得jdbc 連接</p><p>  con = DriverManager.getConnection("jdbc:odbc:TrioMotors", "user", "");</

54、p><p>  //③創(chuàng)建Statement對象</p><p>  Statement stmt = con.createStatement();</p><p>  //④得到查詢結(jié)果集</p><p>  String sql = "select * from userlist where username='"

55、 </p><p>  + username + "'";</p><p>  ResultSet rs = stmt.executeQuery(sql);</p><p><b>  //列印結(jié)果集</b></p><p>  while(rs.next())</p><

56、p><b>  {</b></p><p>  String ps = rs.getString("password");</p><p>  if (ps.equals(password)) {</p><p><b>  //驗(yàn)證通過</b></p><p><b

57、>  ok=true;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //⑤關(guān)閉數(shù)據(jù)庫連接</p><p>  rs.close();</p><p>  stmt.close();</p&

58、gt;<p>  con.close();</p><p><b>  }</b></p><p>  catch (SQLException sqe) {</p><p>  sqe.printStackTrace();</p><p><b>  }</b></p>

59、<p>  return ok;</p><p><b>  }</b></p><p>  public void sendMessage(String message)</p><p><b>  {</b></p><p>  cout.println(message);</p

60、><p><b>  }</b></p><p>  public static void main(String args[])</p><p><b>  {</b></p><p>  Server my=new Server();</p><p><b>  }

61、</b></p><p><b>  }</b></p><p><b>  客戶端代碼:</b></p><p>  public class Client extends JFrame implements ActionListener,Runnable</p><p><b&

62、gt;  {</b></p><p>  public static int port=8888;</p><p>  ServerSocket server;</p><p>  Socket client;</p><p>  BufferedReader cin;</p><p>  PrintWri

63、ter cout;</p><p>  private JLabel userlabel=new JLabel("用戶名");;</p><p>  private JLabel passwordlabel=new JLabel("密碼");</p><p>  private JTextField username=new

64、JTextField(10);</p><p>  private JPasswordField password=new JPasswordField(10);</p><p>  private JButton loginButton=new JButton("登錄");</p><p>  private JButton exitButto

65、n=new JButton("退出");</p><p>  private JPanel p1=new JPanel();</p><p>  JButton messageButton=new JButton("發(fā)送消息");</p><p>  JTextField clientMessage=new JTextFiel

66、d("",25);</p><p>  JPanel p2=new JPanel();</p><p>  JScrollPane messageScrollPane;</p><p>  JTextArea message=new JTextArea();</p><p>  Thread chart=null;<

67、/p><p>  public Client()</p><p><b>  {</b></p><p>  super("網(wǎng)絡(luò)聊天客戶端");</p><p>  p1.add(userlabel);</p><p>  p1.add(username);</p>

68、<p>  p1.add(passwordlabel);</p><p>  p1.add(password);</p><p>  p1.add(loginButton);</p><p>  p1.add(exitButton);</p><p>  loginButton.addActionListener(this);<

69、;/p><p>  exitButton.addActionListener(this);</p><p>  this.getContentPane().add(p1,"North");</p><p>  p2.add(clientMessage);</p><p>  p2.add(messageButton);<

70、/p><p>  messageButton.addActionListener(this);</p><p>  messageScrollPane=new JScrollPane(message,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,</p><p>  JScrollPane.HORIZONTAL_SCROLLBAR_A

71、S_NEEDED);</p><p>  this.getContentPane().add(p2,"South");</p><p>  this.getContentPane().add(messageScrollPane,"Center");</p><p>  this.setSize(500,300);</p&

72、gt;<p>  this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);</p><p><b>  }</b></p><p>  public void actionPerformed(ActionEvent e){</p><p>  if(e.getSource()==lo

73、ginButton){</p><p>  String pword=new String(password.getPassword());</p><p>  if(loginServer(username.getText(),pword))</p><p><b>  {</b></p><p>  chart=ne

74、w Thread(this);</p><p>  chart.start();</p><p><b>  }else{</b></p><p>  JOptionPane.showMessageDialog(null,"user name or password error!");</p><p>

75、;<b>  }</b></p><p>  }else if(e.getSource()==exitButton)</p><p><b>  {</b></p><p>  cout.println("exit");</p><p>  chart=null;</p&g

76、t;<p><b>  }</b></p><p>  if (e.getSource()==messageButton)</p><p><b>  {</b></p><p>  sendMessage(clientMessage.getText());</p><p>  mes

77、sage.append("發(fā)送:"+clientMessage.getText()+"\n");</p><p><b>  }</b></p><p><b>  }</b></p><p>  public boolean loginServer(String username,

78、String password)</p><p><b>  {</b></p><p><b>  try{</b></p><p>  client=new Socket("localhost",8888);</p><p>  cin=new BufferedReader(

79、new InputStreamReader(client.getInputStream()));</p><p>  cout=new PrintWriter(client.getOutputStream(),true);</p><p>  cout.println(username);</p><p>  cout.println(password);</

80、p><p>  String readLine=cin.readLine();</p><p>  if(readLine.equals("ok"))</p><p><b>  {</b></p><p>  message.append("連接到服務(wù)器!\n");</p>

81、;<p>  return true;</p><p><b>  }</b></p><p>  }catch(Exception e)</p><p><b>  {</b></p><p><b>  }</b></p><p>  

82、return false; </p><p><b>  }</b></p><p>  public void run()</p><p><b>  {</b></p><p>  String aline;</p><p><b>  try{</b&

83、gt;</p><p>  while(chart!=null&&(aline=cin.readLine() )!=null)</p><p><b>  {</b></p><p>  if(aline.equals("exit")||aline.equals("stop"))</

84、p><p><b>  {</b></p><p>  message.append("服務(wù)器已斷開!重新登錄!\n");</p><p><b>  break;</b></p><p>  }else message.append("服務(wù)器說:"+aline+

85、"\n");</p><p>  Thread.sleep(200);</p><p><b>  }</b></p><p>  cin.close() ;</p><p>  cout.close() ;</p><p>  client.close() ;</p&g

86、t;<p><b>  }</b></p><p>  catch(Exception e){}</p><p><b>  }</b></p><p>  public void sendMessage(String mes)</p><p><b>  {</b&g

87、t;</p><p>  cout.println(mes);</p><p><b>  }</b></p><p>  public static void main(String args[])</p><p><b>  {</b></p><p>  Client

溫馨提示

  • 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論