




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、發(fā)送端/ *by小郭 *遠(yuǎn)程文件傳輸 */import javax.swing.*;import .*;import java.io.*;import java.awt.*;import java.lang.*;import java.awt.event.*;public class TcpSend extends JFrame implements ActionListenerprivate JButton button; private JFileChooser chooser; /private FileInputStream in;/private String filename;/b
2、yte by=new byte100000;public TcpSend()super("小郭文件傳輸發(fā)送端");this.setBounds(10,10,400,400);this.setLayout(null);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setResizable(false);this.setVisible(true);chooser=new JFileChooser();button=new JButton("發(fā)送");button.setFont(new Fo
3、nt("楷體",Font.PLAIN,30);button.setBounds(0,0,400,400);add(button);button.addActionListener(this); public void actionPerformed(ActionEvent e) chooser.showOpenDialog(this); if(chooser.showOpenDialog(this)=JFileChooser.CANCEL_OPTION) button.setText("取消文件發(fā)送");/小bug 按2次才能取消 return; Sen
4、d send=new Send(chooser.getSelectedFile();send.start();button.setText("文件已發(fā)送");public static void main(String args)new TcpSend();/end TcpSendclass Send extends Threadprivate File file; private Socket socket; private DataOutputStream Dout; private DataInputStream Din; BufferedInputStream bu
5、ffered; Send(File file) this.file = file; try socket= new Socket("localhost",1111);/localhost可以改成IP 如果是內(nèi)網(wǎng) 直接填內(nèi)網(wǎng)IP 外網(wǎng)的話IP要映射 buffered=new BufferedInputStream(socket.getInputStream();/創(chuàng)建一個(gè)緩沖區(qū)數(shù)組,保存套接字s輸入流,以便使用 Din = new DataInputStream(buffered);/數(shù)據(jù)輸入流,用來讀取 Dout = new DataOutputStream(socket.
6、getOutputStream();/數(shù)據(jù)輸出流,用來寫入由數(shù)據(jù)輸入流讀取的數(shù)據(jù) catch (IOException e) e.printStackTrace(); public void run() try Dout.writeUTF(file.getName();/將文件名寫入輸出流 JOptionPane.showMessageDialog(null,"發(fā)送的文件是:"+file.getName(); boolean isAccepted = Din.readBoolean();/接收端是否讀取輸入字節(jié) if(isAccepted) / JOptionPane.sh
7、owMessageDialog(null,"對(duì)方已經(jīng)接受文件傳輸,點(diǎn)擊確定開始傳輸!"); BufferedInputStream Bin = new BufferedInputStream(new FileInputStream(file);/創(chuàng)建一個(gè)緩沖區(qū)數(shù)組,保存文件輸入流 byte by = new byte100000; int l; while( l =Bin.read(by)!= -1)/從輸入流中將各字節(jié)讀取到by數(shù)組中 只要不是=-1 如果=-1即到達(dá)流末尾就跳出循環(huán) Dout.write(by,0,l);/將by數(shù)組中從偏移地址0開始的1個(gè)字節(jié)寫入輸出流
8、。 Dout.flush();/清空數(shù)據(jù)輸出流 /l = Bin.read(by);多了這一句 照成接收的文件大小只有一半的容量 Bin.close();/關(guān)閉緩沖輸入流 / JOptionPane.showMessageDialog(null,file.toString()+"n文件發(fā)送完畢!"); /end if /end try catch (IOException e) e.printStackTrace(); finally/保證即使因?yàn)楫惓?,try里面的代碼不會(huì)被執(zhí)行,但是finally里面的語句還是會(huì)執(zhí)行,這樣可以釋放一些資源 try Din.close();
9、/關(guān)閉數(shù)據(jù)輸入流 Dout.close();/關(guān)閉數(shù)據(jù)輸出流 socket.close(); catch (IOException e) e.printStackTrace(); /end finally /end run()/end Send(線程類)*2011接收端import javax.swing.*;import .*;import java.io.*;import java.awt.*;import java.lang.*;import java.awt.event.*;public class TcpReceive extends JFrame implements Action
10、Listenerprivate JButton button1,button2; private JLabel label; private Socket socket; private ServerSocket ss; private String filename; public TcpReceive()super("小郭文件傳輸接收端");this.setBounds(420,420,400,400);setLayout(null);setVisible(true);this.setResizable(false);this.setDefaultCloseOperat
11、ion(JFrame.EXIT_ON_CLOSE);label=new JLabel();label.setText("暫時(shí)沒收到文件請(qǐng)求,請(qǐng)等待。");button1=new JButton("Accept");button2=new JButton("Cancel");add(label);add(button1);add(button2);label.setBounds(10,10,300,300);button1.setBounds(60,310,100,30);button2.setBounds(240,310,100,30
12、);button1.addActionListener(this);button2.addActionListener(this);try ss=new ServerSocket(1111);/綁定到端口1111的服務(wù)器套接字 while(!ss.isClosed() socket=ss.accept();/偵聽并接受到此套接字的連接 DataInputStream Din = new DataInputStream(socket.getInputStream();/數(shù)據(jù)輸入流,用來讀取從1111端口接收到的輸入流 filename = Din.readUTF();/讀取對(duì)方發(fā)過來的字符串(即
13、文件名) label.setText(filename); catch (IOException e) if(ss.isClosed()/端口關(guān)閉就退出 JOptionPane.showMessageDialog(this,"端口已關(guān)閉,程序退出"); System.exit(0); else e.printStackTrace(); /end構(gòu)造函數(shù)public void actionPerformed(ActionEvent e) if(e.getSource()=button1) JFileChooser chooser=new JFileChooser(); cho
14、oser.setSelectedFile(new File(filename);/路徑抽象化 chooser.showSaveDialog(this); chooser.getName(chooser.getSelectedFile(); Receive receive = new Receive(chooser.getSelectedFile(),socket);/創(chuàng)建Receive線程對(duì)象 用來啟動(dòng)線程類 if(chooser.showSaveDialog(this)=JFileChooser.APPROVE_OPTION)/bug:按2次保存才保存下來 /System.out.print
15、ln("bbb"); if(chooser.getSelectedFile().exists()/測(cè)試此抽象路徑名表示的文件或目錄是否存在 int over=JOptionPane.showConfirmDialog(this,"文件"+chooser.getSelectedFile().getName()+"已經(jīng)存在,確定覆蓋嗎?","覆蓋與否", JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE); if(over=JOptionPane.YES_OPT
16、ION)/bug:按2次確定才能執(zhí)行 /elseSystem.out.println("aaa"); receive.start(); /end if /end if elsereceive.start(); /System.out.println("aaaa"); /bug:按2次取消才能取消 第二次取消才打印 /end if /end if if(e.getSource()=button2) if(label.getText()="暫時(shí)沒收到文件請(qǐng)求,請(qǐng)等待。") JOptionPane.showMessageDialog(thi
17、s,"沒收到請(qǐng)求哦!"); else JOptionPane.showMessageDialog(this,"正在退出!"); System.exit(0); /end if/end actionPerformedpublic static void main(String args)new TcpReceive();/end TcpReceiveclass Receive extends Thread private File file; private Socket socket; int l; public Receive(File file, S
18、ocket socket) this.file=file; this.socket=socket; public File location() return file; public void run() if(file = null) JOptionPane.showMessageDialog(null,"沒有監(jiān)聽到文件"); return; else try DataOutputStream Dout = new DataOutputStream(socket.getOutputStream();/數(shù)據(jù)輸出流,用來寫入由數(shù)據(jù)輸入流讀取的數(shù)據(jù) Dout.writeBoo
19、lean(true); catch (IOException e) e.printStackTrace(); /end else try FileOutputStream fout = new FileOutputStream(file);/創(chuàng)建一個(gè)向指定file表示的文件中寫入數(shù)據(jù)的文件輸出流。即上面的chooser.getSelectedFile() BufferedOutputStream Bout = new BufferedOutputStream(fout);/創(chuàng)建一個(gè)新的緩沖輸出流,以將數(shù)據(jù)寫入指定的輸出流。 BufferedInputStream Bin = new BufferedInputStream(socket.getInputStream();/創(chuàng)建一個(gè)緩沖區(qū)數(shù)組,保存套接字socket輸入流,以便使用 byte by = new byte100000; int l ; int yes=J
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 信息化技術(shù)在農(nóng)業(yè)生產(chǎn)中的合作協(xié)議
- 農(nóng)民工在崗培訓(xùn)與勞務(wù)派遣合同
- 購買物業(yè)管理服務(wù)協(xié)議書
- 農(nóng)業(yè)生產(chǎn)經(jīng)營(yíng)資金互助保障協(xié)議
- 智慧寓言伊索寓言故事解讀
- 高考語文復(fù)習(xí):專題六、七
- 體育培訓(xùn)中心學(xué)員意外事故的免責(zé)及保障協(xié)議
- 高考文言文斷句100題專項(xiàng)練習(xí)(附答案及翻譯最方便)
- 小馬過河自我成長(zhǎng)的故事解讀
- 農(nóng)業(yè)旅游開發(fā)手冊(cè)
- 《鴉片戰(zhàn)爭(zhēng)改》課件
- 銀行網(wǎng)點(diǎn)裝修工程施工組織設(shè)計(jì)方案
- 《服裝零售管理實(shí)習(xí)》課程教學(xué)大綱
- 2024(統(tǒng)編版)語文七年級(jí)上冊(cè)《西游記》真題+綜合題練習(xí)(學(xué)生版+解析版)
- 2024年陜西省初中學(xué)業(yè)水平考試·數(shù)學(xué)
- 統(tǒng)編版九年級(jí)道德與法治上冊(cè)期中考試卷帶答案
- 火電廠汽機(jī)車間安全培訓(xùn)
- 2025初級(jí)會(huì)計(jì)理論考試100題及解析
- 中華人民共和國(guó)統(tǒng)計(jì)法
- 某部勞務(wù)派遣服務(wù) 投標(biāo)方案(技術(shù)標(biāo) )
- 運(yùn)用PDCA降低住院患者跌倒、墜床發(fā)生率課件
評(píng)論
0/150
提交評(píng)論