java(J2EE)課程設計報告_第1頁
java(J2EE)課程設計報告_第2頁
java(J2EE)課程設計報告_第3頁
java(J2EE)課程設計報告_第4頁
java(J2EE)課程設計報告_第5頁
已閱讀5頁,還剩31頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、煙臺工程職業(yè)技術學院 系 專業(yè) 級課程設計(論文)題 目: 局域網(wǎng)點對點通信 姓名 學號 指導教師(簽名) 二一 年 七 月 十四 日 局域網(wǎng)點對點通信摘要:本論文介紹了用Java語言實現(xiàn)一個類似于QQ的P2P聊天系統(tǒng),有服務器端和客戶端。其中,服務器端記錄當前在線用戶列表,并把此列表發(fā)送給每個在線用戶。任意一個用戶可以和其他任何一個在線用戶發(fā)動信息交互,包括聊天和文件的傳送;也可以和其他所有在線用戶同時發(fā)動信息交互。當和其他所有用戶同時發(fā)動信息交互式,無法傳送文件,只能聊天。前言了解、掌握Socket編程的思想、原理及方法;利用Java Socket API編制一個能部署在Internet上

2、的點對點數(shù)據(jù)交換軟件;熟悉各種網(wǎng)絡協(xié)議的工作原理,運用點對點數(shù)據(jù)交換,實現(xiàn)基于服務器轉(zhuǎn)發(fā)的任意多點間的數(shù)據(jù)交換和共享;理解處于網(wǎng)絡環(huán)境下的兩個相同的程序如何實現(xiàn)數(shù)據(jù)交換,進一步理解服務器和客戶端的工作原理及通信方法;在數(shù)據(jù)交互中掌握TCP/IP的體系結(jié)構(gòu),體會TCP的運輸連接管理的三個階段:建立連接、數(shù)據(jù)傳送、釋放連接。一、設計思路(一)系統(tǒng)的基本功能 1、當某用戶以自己的主機IP進入聊天室以后,自己的IP會在“當前聊天者列表”中顯示出來;2、“聊天記錄”能顯示自己發(fā)給某一個在線用戶的“密函”、自己發(fā)給所有在線聊天者的 話 以 及別的在線用戶發(fā)給自己的話;3、“發(fā)送的話”顯示自己對某一在線用戶

3、或者所有在線用戶要說的話;4、通過“發(fā)送”按鈕將自己的“發(fā)送的話”發(fā)送出去,并在“聊天記錄”中顯示出來; 5、通過“刷新談話區(qū)”,將“聊天記錄”中的內(nèi)容清空;6、通過“刷新在線用戶”實現(xiàn)“當前聊天者列表”中的IP信息的刷新,即重新讀取聊天 室用戶的列表信息;7、通過雙擊“當前聊天者列表”中的某個IP,彈出“QQ”對話框; 8、彈出“QQ”對話框,課實現(xiàn)“最大化”“最小化”“關閉”操作; 9、在彈出的“QQ”對話框中輸入要說的話,通過“發(fā)送”實現(xiàn)向某一特定在線用戶的通話;10、在彈出的“QQ”對話框中,通過“發(fā)送文件”實現(xiàn)向某一特定在線用戶的文件傳送;11、在彈出的“QQ”對話框中,通過“接收文

4、件”實現(xiàn)接收某一特定在線用戶發(fā)給自己的文件;12、當有某一用戶有文件需要接收時,會彈出一個對話框和響起提示聲音,表明有文件需要接收,完成文件接收后,發(fā)送方和接收方都會響起提示聲音;13、服務端程序先運行,服務器讀取來自客戶端的數(shù)據(jù)流請求,并把相應處理結(jié)果返回客戶端,完成與客戶端的通信;(二) 功能結(jié)構(gòu)圖(三)選用的語言、技術語言 : 選用的是Java語言,在eclipse的開發(fā)平臺下進行技術:TCP協(xié)議Java中Socket套接字客戶/服務器(C/S)模型點對點通信(P2P)模型二、 設計實現(xiàn)(一) 系統(tǒng)中數(shù)據(jù)結(jié)構(gòu)1、用Java操縱TCPTCP使用更低層的IP通訊協(xié)議在兩臺計算機之間建立連接。

5、這種連接提供了一個答應字節(jié)流發(fā)送和接收的接口,并且采用透明的方式把數(shù)據(jù)轉(zhuǎn)換為IP數(shù)據(jù)報。數(shù)據(jù)報的問題之一是不能保證數(shù)據(jù)包到達目的地。TCP解決了這個問題,它提供了有保證的數(shù)據(jù)字節(jié)的送達。而且,當網(wǎng)絡錯誤影響了送達的時候,TCP可以通過類似重發(fā)數(shù)據(jù)報來解決這個問題。Socket類實現(xiàn)了客戶端套接字,它是屬于一臺或兩臺計算機的兩個TCP通訊端口之間的通訊通道。但是TCP套接字不能與兩臺以上的計算機通訊。如果需要,則客戶端應用程序必須建立多個套接字連接,每臺計算機一個套接字。Socket(InetAddress address, int port)產(chǎn)生java.io.IOException異常。ja

6、va.lang.SecurityException:建立連接到指定的IP地址和端口的套接字不過不能連接,或連接到主機違法了安全性約束條件,就產(chǎn)生這種異常。Socket(InetAddress, address, int port, InetAddress localAddress, int localPort)產(chǎn)生java.io.IOException和java.lang.SecurityException異常,這個構(gòu)造函數(shù)的功能是建立連接到指定的地址和端口的套接字,并把它綁定到特定的本地地址和本地端口。Socket(String host, int port)產(chǎn)生java.io.IOExce

7、ption、java.lang.SecurityException異常。這個構(gòu)造函數(shù)的功能是建立連接到特定主機和端口的套接字。這個方法答應指定一個字符串而不是一個InetAddress。假如指定的主機名不能解析,就不能建立連接;假如違法了安全性約束條件,就產(chǎn)生異常。Socket(String host, int port, InetAddress localAddress, int localPort)產(chǎn)生.UnknownHostException、java.io.IOException、java.lang.SecurityException異常。這個構(gòu)造函數(shù)的功能是建立連接到

8、特定主機和端口的套接字,并綁定到特定的本機端口和地址。它答應指定字符串形式的主機名稱,而不是指定InetAddress實例,同時它答應指定一個將綁定的本地地址和端口。這些本地參數(shù)對于多地址主機是有用的。假如指定的主機名不能解析,就不能建立連接;假如違法了安全性約束條件,就產(chǎn)生異常。2.多播實現(xiàn)如果程序要將同一信息發(fā)送給多個用戶,那么程序和用戶程序可以利用多點傳送(multicasting)方式進行通信。多點傳送就是服務程序?qū)S玫亩帱c傳送組的IP地址和端口發(fā)送一系列自尋址數(shù)據(jù)報,通過加入操作IP地址被多點傳送Socket注冊,通過這個點,用戶程序可以接收發(fā)送給組的自尋址包。網(wǎng)絡API通過Mul

9、ticastSocket類和一些輔助類或接口(比如NetworkInterface)支持多點傳送,當一個用戶程序要加入多點傳送組時,就創(chuàng)建一個MulticastSocket對象。用戶要加入多點傳送組,就要調(diào)用兩個joinGroup()方法中的一個;同樣,要離開傳送組,也要調(diào)用兩個leaveGroup()方法中的一個。由于MulticastSocket擴展了DatagramSocket類,一個MulticastSocket對象就有權(quán)訪問DatagramSocket方法。3.窗口中的面板的設計(1) 框架框架是一個帶標題框的窗口,窗口的大小可以改變。默認情況下,框架使用BorderLayout布局

10、管理器,可以使用setLayout()對此進行修改。大多數(shù)應用程序都會在程序開始的時候創(chuàng)建一個框架,當然也可以在一個程序中使用多個框架。(2) 面板面板是一個容器,并且是一個純粹的容器,它不能作為獨立的窗口使用。默認情況下,面板使用FlowLayout布局管理器,同樣可以使用setLayout()方法對此進行修改。面板可以像按鈕那樣被創(chuàng)建并加入到其他容器中。當面板加入到其他容器中時,可以對他執(zhí)行以下兩項重要操作:為面板指定一個布局管理器,使得在整個顯示區(qū)域中,面板所在的部分具有特殊的布局。向面板中加入組件。(3) 創(chuàng)建面板和構(gòu)造復雜的布局面板是通過構(gòu)造方法panel()創(chuàng)建的。面板在創(chuàng)建之后,

11、必須通過add()方法加入到其他容器中才有意義??蚣艿牟季止芾砥魇荁orderLayout,面板被放置在其North區(qū)域。在面板中,則放置了兩個按鈕。通過這種容器嵌套的方法可以創(chuàng)建出復雜的布局。對于程序中的框架而言,面板也是它的一個組件。(4)程序中各個主要構(gòu)件主要功能的介紹MyWindow.java:顯示聊天界面的各個板塊等;QQDialog.java:當雙擊“當前聊天者列表”中的IP時,彈出對話框界面,用于發(fā)送密函、發(fā)送文件以及接收文件等操作;RecevieSMG.java:接收群發(fā)或是單發(fā)時的聊天記錄等操作;RecevieToOne.java:建立TCP連接、判斷是否進行報文發(fā)送操作等;

12、Recevie.java:用于接收文件等操作;SendFile.java:建立連接、發(fā)送文件等操作;SendToOne.java:建立連接、確定發(fā)送文查找發(fā)送文件等操作;(5)程序中各主要部件的所屬類系統(tǒng)線程主類:PPfriend聊天室界面AWT面板類:Apanel1,Apanel2,Bpanel,MyWindow發(fā)送密函彈出式窗口類:QQDialog發(fā)送或是接收信心類:RecevieSMG,Recevie,RecevieToOne,SendFile,SendToOne其他類:Panel,String, Button,JFrame,File, DatagramSocket,AudioClip,

13、Socket等(二)流程圖圖11. 功能代碼說明(1)PPfriend.java此程序是整個系統(tǒng)的線程主類,程序的運行由此開始。它的主要工作就是實現(xiàn)窗口的構(gòu)建、顯示初始信息、判斷用戶的操作并響應,因此此程序比較長,但并不復雜。因此此處不再贅述,具體實現(xiàn)見附錄。(2)MyWindow.java此程序的功能是構(gòu)建聊天界面。主要包含如下幾個板塊:APanel, APanel2, BPanel;對應的界面中的位置如下:圖2其核心代碼如下:public class MyWindow extends FrameLabel person;APanel pa;BPanel pb;public MyWindow

14、()super(.);person = new Label(聊天記錄:);pa = new APanel();pb = new BPanel();setLayout(new BorderLayout();setBackground(new Color(206, 113, 150);setSize(550, 450);setLocation(450, 100);setResizable(false);add(North, person);add(Center, pa);add(South, pb);addWindowListener(new WindowAdapter()public void

15、windowClosing(WindowEvent e)System.exit(1););setVisible(true);(3)QQDialog.java此程序的主要作用是實現(xiàn)點對點聊天的信息發(fā)送和文件傳送界面。此界面比較簡單。圖3核心代碼主要是控件的布局,此處就不附加代碼了。具體的代碼見附錄。(4)ReceiveSMG.java此程序的作用是接收群發(fā)或是點對點通信的聊天記錄等。其核心代碼如下:while(true)byte inbuf = new byte2048;DatagramSocket socket = new DatagramSocket(8005);DatagramPacket

16、 packet = new DatagramPacket(inbuf, inbuf.length);socket.receive(packet);msg = new String(packet.getData();if(msg != null)friend.myw.pa.chat_txt.append(msg);friend.myw.pa.chat_txt.append(n);ac.play();socket.close();sleep(1000);此段程序中,byte類型的數(shù)組inbuf是用來存儲接收到的信息的。socket是建立的一個通信套接字,packet則是建立的一個數(shù)據(jù)報包。當運行程

17、序時,系統(tǒng)利用socket套接字建立連接,然后,如果兩臺機器進行數(shù)據(jù)交換,則socket將接收到的信息填充到packet緩沖區(qū)中。(5)Receive.java此程序是用來接收文件的。其核心代碼如下:int length;File file = new File(filepath);FileOutputStream outputb = new FileOutputStream(file);if(friend.receivetoone.getip != null)addr = InetAddress.getByName(friend.receivetoone.getip);Socket sock

18、et = new Socket(addr, 8888);tryPrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), true);InputStream netIn = socket.getInputStream();InputStream in = new DataInputStream(new BufferedInputStream(netIn);OutputStream netOut = socket.getOutputStream();Ou

19、tputStream doc = new DataOutputStream(new BufferedOutputStream(netOut);byte buf = new byte2048;length = in.read(buf);while(length != -1)outputb.write(buf, 0, length);length = in.read(buf);in.close();outputb.close();catch(Exception e)e.printStackTrace();finallyJOptionPane.showMessageDialog(null, 文件傳輸

20、成功!, null, JOptionPane.OK_OPTION); socket.close();此程序稍微有些復雜,主要是應用的java中的文件輸出流FileOutputStream這個類。程序的大致的運行過程是這樣的,當用戶接收到其他用戶的傳送文件申請時,用戶要選擇一個文件存儲路徑。當路徑選擇了以后,程序利用java的文件輸出流將要傳送的文件寫到緩沖區(qū)buf中。(6)ReceiveToOne.java此程序是整個系統(tǒng)的核心,主要功能是建立TCP連接,判斷是否進行報文發(fā)送等操作。其核心代碼如下:byte inbuf = new byte256;DatagramSocket socket =

21、 new DatagramSocket(8889);DatagramPacket packet = new DatagramPacket(inbuf, inbuf.length);socket.receive(packet);getip = packet.getAddress().getHostAddress().toString();if(getip != null)friend.qq.refile.setEnabled(true);friend.qq.setVisible(true);return;此程序雖然是核心,但稍微簡單。最重要的就一行:getip = packet.getAddre

22、ss().getHostAddress().toString();這句代碼的作用就是返回某臺機器的IP地址的字符串形式。(7)SendFile.java此程序主要是建立連接以進行文件傳送。其核心代碼如下:int length;sendtoone = new SendToOne(friend);File file = new File(filepath);FileInputStream fos = new FileInputStream(file);ServerSocket s = new ServerSocket(PORT);trySocket socket = s.accept();tryI

23、nputStream netIn = socket.getInputStream();InputStream in = new DataInputStream(new BufferedInputStream(netIn);OutputStream netOut = socket.getOutputStream();OutputStream doc = new DataOutputStream(new BufferedOutputStream(netOut);file.getAbsolutePath();byte buf = new byte2048;length = fos.read(buf)

24、;while(length != -1)doc.write(buf, 0, length);doc.flush();length = fos.read(buf);fos.close();doc.close();catch(Exception e)e.printStackTrace();finallyJOptionPane.showMessageDialog(null, 文件傳輸成功!, null, JOptionPane.OK_OPTION);socket.close();catch(Exception e)e.printStackTrace();finallys.close();此程序看起來

25、有點復雜,其實就是利用socket建立連接,然后利用java中的文件輸入輸出流進行文件的傳送。這個程序跟Receive.java文件差不多,就不多加分析了,主要就是一個地方,當寫文件的時候,有一個doc.flush();方法的調(diào)用。這個方法的主要作用是刷新此輸出流并強制寫出所有緩沖的輸出字節(jié)。(8)SendToOne.java此程序的主要作用是建立連接以發(fā)送文件。其核心代碼如下:tryThread.sleep(1000);ia = InetAddress.getByName(friend.sendIp);byte bs = net.getBytes();DatagramPacket reque

26、st = new DatagramPacket(bs, bs.length, ia, 8889);DatagramSocket socket = new DatagramSocket();socket.send(request);catch(Exception e)e.printStackTrace();此代碼比較簡單,就不多加分析了。2. 程序運行截圖(1).剛開始運行程序的時候,如果另一臺機器(記為B)上此程序已運行,則本機器(記為A)上的程序會將B的IP識別出來,并顯示在當前聊天者列表中:圖4此列表中,第一個是A機的IP地址,其他的就是在線用戶。如果我們雙擊,則會

27、彈出點對點聊天&文件傳輸窗口,如下圖。圖5當我們輸入內(nèi)容并點擊發(fā)送時,結(jié)果為:圖6圖7當有3臺機器上都運行此程序時,如果兩臺機器之間進行通信,則第三臺機器看不到信息,如圖(發(fā)送信息至,但看不到這些信息):圖8圖9此系統(tǒng)還可以實現(xiàn)群聊:圖10圖12圖13三、結(jié)論本次網(wǎng)絡課程設計,要求是利用TCP或UDP完成網(wǎng)絡通信并在此基礎上完成數(shù)據(jù)應用。我所做的軟件是點對點即時通訊。此軟件完全實現(xiàn)了網(wǎng)絡的即時通信。另外本軟件還實現(xiàn)了文件傳輸?shù)墓δ?。由于此軟件較小,因此其性能較好,但如果將其發(fā)展為較大的軟件,則有些地方實現(xiàn)得還不是太合理,但

28、總體來說達到了設計目標,完成了基本的功能要求。就本軟件來說,有些地方還有待改進。比如,當程序運行一段時間之后,在線列表會出現(xiàn)閃爍,除本機外,同一個IP地址會顯示兩次,如圖14所示。真正的原因暫時沒有找出,但我以后肯定會將其完善,并找出出現(xiàn)這個問題的原因。四、結(jié)束語說實話,做這次課程設計之前,我從來沒有試過用任何語言編寫網(wǎng)絡通信方面的應用程序。因此,進行設計時,我有些緊張,怕自己做不出來。而且真正做的過程中,我也遇到了很多的問題,因為我以前對用語言實現(xiàn)網(wǎng)絡通信沒有一點認識。因此,我認真看了一下java的API,看了包中的大部分可能用到的類的用法以及這些類的構(gòu)造方法和自帶的方法。大

29、體上有了關于整個系統(tǒng)的構(gòu)思。等到我把java的關于網(wǎng)絡的API看懂了以后,真正去實現(xiàn)的時候,才發(fā)現(xiàn),其實實現(xiàn)這個系統(tǒng)的難度并不大。通過這次課程設計,我感覺我學到了很多。首先,遇到一個一點都不懂的問題的時候,我本能的反應是緊張,我想大多數(shù)人都會有這種感覺。但是,當我們深入到這個問題的本質(zhì),將這個問題逐步分解,分解成一個個小塊兒的時候,我們就會發(fā)現(xiàn),其實也沒什么。再大的系統(tǒng)也是由一個個小程序組合到一起形成的。其次,這次課程設計讓我對于我以前從來沒有用過的包了解頗深。我意識到,學一樣東西,如果僅僅是看,我們并不能真正地弄懂,這個時候如果讓我們寫點東西出來,我們很有可能完全不知道該怎么

30、下手,這也就是常說的眼高手低。只有在實踐中學到的東西才是最寶貴,最持久的。本次課程設計,得到了陳婭冰老師的大力幫助,在此表示感謝。 五、參考文獻與附錄(一)參考文獻1. 陳軼.姚曉昆編著.Java程序設計實驗指導.北京:清華大學出版社,20062. 楊昭編著.二級Java語言程序設計教程.北京:中國水利水電出版社,20063.趙文靖編著.Java程序設計基礎與上機指導.北京:清華大學出版社,20064. 趙毅主編.跨平臺程序設計語言Java.西安:西安電子科技大學出版社,20065. 王路群.Java高級程序設計.北京:中國水利水電出版社,20066. 雍俊海編著.Java程序設計習題集.北京

31、:清華大學出版社,2006(二)附錄:系統(tǒng)源代碼1. MyWindow.javapackage hf;import java.awt.*;import java.awt.event.*;class APanel extends PanelTextArea chat_txt;APanel2 apanel2;public APanel()chat_txt = new TextArea(40, 40);chat_txt.setEditable(false);apanel2 = new APanel2();setLayout(new BorderLayout();add(West, chat_txt)

32、;add(East, apanel2);class APanel2 extends Paneljava.awt.List list;public APanel2()trylist = new java.awt.List(25, false);catch(NullPointerException e)setLayout(new BorderLayout();add(Center, list);add(North, new Label(當前聊天者列表:);add(East, new Label();add(South, new Label(雙擊一個人的昵稱可以進行交談);class BPanel

33、extends PanelTextField msg_txt;Button button1, button2, button3, button4, button5;public BPanel()msg_txt = new TextField(30);button1 = new Button(發(fā)送);button2 = new Button(刷新談話區(qū));button3 = new Button(刷新在線用戶);setLayout(new FlowLayout(FlowLayout.LEFT);add(new Label(發(fā)送的內(nèi)容);add(msg_txt);add(button1);add(

34、button2);add(button3);public class MyWindow extends FrameLabel person;APanel pa;BPanel pb;public MyWindow()super(.);person = new Label(聊天記錄:);pa = new APanel();pb = new BPanel();setLayout(new BorderLayout();setBackground(new Color(206, 113, 150);setSize(550, 450);setLocation(450, 100);setResizable(f

35、alse);add(North, person);add(Center, pa);add(South, pb);addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(1););setVisible(true);2. QQDialog.javapackage hf;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class QQDialog extends JFrameTextAre

36、a chat_txt;Button sendBut, fileBut, refile;QQDialog(String name)super(name);Label title = new Label(密函:);chat_txt = new TextArea(20, 20);chat_txt.setEditable(true);sendBut = new Button(發(fā)送);fileBut = new Button(發(fā)送文件);refile = new Button(接收文件);setLayout(new BorderLayout();Panel p = new Panel(new FlowL

37、ayout(FlowLayout.LEFT);p.add(sendBut);p.add(fileBut);p.add(refile);add(North, title);add(Center, chat_txt);add(South, p);setSize(400, 200);setLocation(400, 400);addWindowListener(new WindowAdapter()public void WindowClosing(WindowEvent e)e.getWindow().dispose(););setVisible(true);3. PPfriend.javapac

38、kage hf;import java.applet.*;import java.awt.*;import java.awt.event.*;import java.io.*;import .*;import java.util.*;import javax.swing.*;public class PPfriend extends JFrame implements ActionListenerpublic String myAddress;public String myIP;Button button1, button2, button3;Vector clients =

39、 new Vector();public MyWindow myw;QQDialog qq;String sendIp;BroadcastThread broadcast;receiveSMG rm;String filepath = null;String savepath = null;ReceiveToOne receivetoone;public PPfriend()tryppInit();catch(Exception e1)e1.printStackTrace();serverListen();void ppInit()myw = new MyWindow();qq = new Q

40、QDialog(QQ);qq.setVisible(false);qq.refile.setEnabled(false);receivetoone = new ReceiveToOne(this);receivetoone.start();myw.pa.apanel2.list.addActionListener(this);myw.pb.button1.addActionListener(this);myw.pb.button2.addActionListener(this);myw.pb.button3.addActionListener(this);qq.fileBut.addActio

41、nListener(this);qq.sendBut.addActionListener(this);qq.refile.addActionListener(this);rm = new receiveSMG(this);rm.start();public void serverListen()broadcast = new BroadcastThread();broadcast.start();public void actionPerformed(ActionEvent e)if(e.getSource() = myw.pb.button1)myw.pa.chat_txt.append(m

42、yIP + : + myw.pb.msg_txt.getText() + n);for(int i = 0; i clients.size(); i+)if(!clients.elementAt(i).toString().equals(myIP)tryString message = myIP + : + myw.pb.msg_txt.getText().toString();InetAddress ia = InetAddress.getByName(clients.elementAt(i).toString();byte bs = message.getBytes();DatagramP

43、acket sendmessage = new DatagramPacket(bs, bs.length, ia, 8005);DatagramSocket socket = new DatagramSocket();socket.send(sendmessage);socket.close();qq.chat_txt.setText(null);qq.chat_txt.requestFocus();catch(Exception e2)e2.printStackTrace();myw.pb.msg_txt.setText(null);myw.pb.msg_txt.requestFocus()

44、;else if(e.getSource() = myw.pb.button2)myw.pa.chat_txt.setText();else if(e.getSource() = myw.pb.button3)broadcast.yield();broadcast = null;clients.clear();myw.pa.apanel2.list.removeAll();myw.pa.apanel2.list.repaint();serverListen();else if(e.getSource() = myw.pa.apanel2.list)qq.setVisible(true);sen

45、dIp = myw.pa.apanel2.list.getSelectedItem().toString();else if(e.getSource() = qq.fileBut)JFileChooser chooser = new JFileChooser();int returnVal = chooser.showDialog(null, send);if(returnVal = chooser.APPROVE_OPTION)filepath = chooser.getSelectedFile().getAbsolutePath();SendFile mysf = new SendFile

46、(this, filepath);mysf.start();else if(e.getSource() = qq.refile)JFileChooser mychooser = new JFileChooser();int myreturnVal = mychooser.showDialog(null, save);if(myreturnVal = mychooser.APPROVE_OPTION)savepath = mychooser.getSelectedFile().getAbsolutePath();Receive myreceive = new Receive(this, save

47、path);myreceive.start();else if(e.getSource() = qq.sendBut)tryString message = myIP + : + qq.chat_txt.getText().toString();myw.pa.chat_txt.append(message + n);InetAddress ia = InetAddress.getByName(sendIp.toString();byte bs = message.getBytes();DatagramPacket sendmessage = new DatagramPacket(bs, bs.

48、length, ia, 8005);DatagramSocket socket1 = new DatagramSocket();socket1.send(sendmessage);qq.chat_txt.setText(null);qq.chat_txt.requestFocus();socket1.close();catch(Exception e3)e3.printStackTrace();class BroadcastThread extends Threadpublic void getmyAddress()tryInetAddress addr = InetAddress.getLo

49、calHost();myAddress = addr.getAddress().toString();myIP = addr.getHostAddress();catch(Exception e4)e4.printStackTrace();public void run()tryMulticastSocket multicastSocket = new MulticastSocket(7777);InetAddress inetAddress = InetAddress.getByName();multicastSocket.joinGroup(inetAddress);by

50、te receiveIp = new byte12;getmyAddress();while(true)DatagramPacket sendIp = new DatagramPacket(myAddress.getBytes(), myAddress.length(),inetAddress, 7777);multicastSocket.send(sendIp);DatagramPacket datagramPacket = new DatagramPacket(receiveIp,receiveIp.length, inetAddress, 7777);multicastSocket.re

51、ceive(datagramPacket);String ip = datagramPacket.getAddress().getHostAddress().toString();if(!clients.contains(ip)clients.add(ip);myrepaint();sleep(1000);catch(Exception e5)e5.printStackTrace();void myrepaint()myw.pa.apanel2.list.removeAll();for(int i = 0; i clients.size(); i+)myw.pa.apanel2.list.add(clients.elementAt(i).toString();public static void main(String args)new PPfriend();4. ReceiveSMG.javapackage hf;import java.applet.*;import java.io.*;import .*;public cla

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論