标签:
本程序的使用者为局域网用户。程序实现的主要功能是局域网的常见格式的文件的传
输。其用例图如图1。本程序可通过可视化操作界面实现一对多的文件传输。
TCP协议工作流程:
UDP协议工作流程:
采用DUP协议设计即时聊天功能在即时聊天功能中设计了一个发送端和一个接收端发送端和接收端处于同一个平台中为了使通信双方能够造一次连接中进行多次通信在接收端采用了多线程实现多次通信。在通信建立的时候通信的发起方首先填写通信的ip地址和port端口然后发送消息给接收者。接受者需要在同样的端口上等待发起者的信息。
发送端:
接收端:
使用TCP协议实现文件传输功能在文件传输开始时由发送方给接收方发送一个消息消息内容为待发送文件的文件名和长度。接收端收到后判断是不是传送的文件如果是传送的文件接收方择是否接收文件。然后开始传输文件文件传输完成后自动关闭服务器端和客户端。
发送端:
接收端:
程序开始运行时,首先判断连接Ip,无误后连接(by 陈小斌)
1 try 2 { 3 String ip = jTextField.getText(); 4 if( ip.equals("") ) 5 { 6 JOptionPane.showMessageDialog( jPanelRight,"请先输入对方IP", 7 "IP为空",JOptionPane.ERROR_MESSAGE); 8 } 9 else 10 { 11 12 status.setText( "<html>连接中......."); 13 talkingSocket = new Socket(jTextField.getText() , 9999); 14 output = new PrintWriter( talkingSocket.getOutputStream(), true ); 15 output.println("[TALK]"); 16 status.setText( "<html>连接成功,可以进行<p>交谈了"); 17 input = new BufferedReader( new InputStreamReader 18 ( talkingSocket.getInputStream() ) ); 19 IP = jTextField.getText(); 20 message.setEnabled( true ); 21 connect.setEnabled( true ); 22 23 } 24 }
文件接收请求处理过程()
1 if( e.getSource() == accept )//接受文件的请求 2 { 3 JFileChooser fileChooser = new JFileChooser(); 4 fileChooser.setFileSelectionMode( JFileChooser.DIRECTORIES_ONLY ); 5 6 int result = fileChooser.showSaveDialog( this ); 7 8 if( result == JFileChooser.CANCEL_OPTION ) 9 return; 10 11 File filePath = fileChooser.getSelectedFile(); 12 13 if( filePath == null||filePath.getName().equals("") ) 14 { 15 JOptionPane.showMessageDialog( this, "Invalid File Name", 16 "Invalid File Name", JOptionPane.ERROR_MESSAGE); 17 } 18 else 19 { 20 File file = new File( filePath, lt.fileName ); 21 ReceiverThread receiver = new ReceiverThread( lt.fileReceiver, file, 22 listenerStatus,this.fileAcceptRate,this.jProgressBarAccept,lt.lengthOfFile ); 23 receiver.start(); 24 25 accept.setEnabled( false ); 26 refuse.setEnabled( false ); 27 } 28 }
接收确认后的处理过程(by 王浩)
1 try 2 { 3 Socket s = new Socket( IP, 9999); 4 PrintWriter out = new PrintWriter(s.getOutputStream(),true); 5 BufferedReader in = new BufferedReader( 6 new InputStreamReader( s.getInputStream() ) ); 7 8 out.println( "[FILE]"+file.getName() ); 9 out.println( file.length() ); 10 fileStatus.setText("<html>request to send file ‘"+file.getName() 11 +"‘("+ fileLength( file.length() )+") to "+IP); 12 13 String answer = in.readLine(); 14 15 if ( answer.equals("OK") ) 16 { 17 fileStatus.setText("["+IP+"]"+" OK"); 18 19 BufferedInputStream localFile = new BufferedInputStream 20 (new FileInputStream( file )); 21 BufferedOutputStream sendFile = 22 new BufferedOutputStream( s.getOutputStream()); 23 24 25 fileStatus.setText("<html>begin to send <p>"+file.getName()+"<p>( "+ 26 fileLength(file.length() ) +" )"); 27 28 long fl = file.length(); 29 long cur=0; 30 31 byte[] buffer = new byte[1024 * 128]; 32 int b; 33 34 jProgressBar.setVisible( true ); 35 36 long initialTime = new Date().getTime(); 37 long preTime = initialTime; 38 long curTime = initialTime; 39 long interspaceAmount=0; 40 41 while ( (b = localFile.read(buffer)) != -1) { 42 sendFile.write(buffer, 0, b); 43 cur+=b; 44 interspaceAmount+=b; 45 jProgressBar.setValue( (int)( (cur*1.0/fl)*100 ) ); 46 47 curTime = new Date().getTime(); 48 if( (curTime-preTime)>500 ) 49 { 50 fileSendRate.setText( 51 fileLength( interspaceAmount*1000/(curTime-preTime) ) +"/秒"); 52 preTime = curTime; 53 interspaceAmount = 0; 54 } 55 } 56 57 fileSendRate.setText( "用时"+(int)( (curTime-initialTime)*1.0/1000+0.5 )+"秒" ); 58 59 fileStatus.setText( "<html>Have successfully<p>send the file <p>" 60 +file.getName()+"<p>to "+IP); 61 jProgressBar.setVisible( false ); 62 } 63 else 64 { 65 fileStatus.setText("<html>["+IP+"]"+"<p>refuse to accept the file<p>" 66 +file.getName()); 67 }
更多详细代码请到我们团队的GitHub地址http://github.com/bbker/FileTrans中下载查看, 此次团队项目设计程序代码部分由王浩、陈小斌编写;李增佐和郑丁鹏将在接下来负责程序的测试和bug工作。
标签:
原文地址:http://www.cnblogs.com/bbker/p/4575740.html