日期:2014-05-20 浏览次数:20868 次
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; public class Server { private static final int CLIENT_PORT_NUM = 7000; private static final int SERVER_PORT_NUM = 6000; private static final int MAX_URL_LENGTH = 200; private static final int LENGTH_PER_TRANSMIT = 1024 * 10; private DatagramSocket server; private DatagramSocket urlReceiver; private String url; public Server() throws SocketException { server = new DatagramSocket(); urlReceiver = new DatagramSocket( SERVER_PORT_NUM ); } private void receiveURL() { byte[] buff = new byte[ MAX_URL_LENGTH ]; DatagramPacket packet = new DatagramPacket( buff, buff.length ); try { urlReceiver.receive( packet ); } catch ( IOException e ) { e.printStackTrace(); } url = new String( packet.getData() ); } public void sendData() { receiveURL(); File outputFile = new File( url ); try { FileInputStream fis = new FileInputStream( outputFile ); byte[] buff = new byte[ LENGTH_PER_TRANSMIT ]; int len = 0; while ( ( len = fis.read( buff ) ) != -1 ) { DatagramPacket packet = new DatagramPacket( buff, len, InetAddress.getByName( "localhost" ), CLIENT_PORT_NUM ); server.send( packet ); } } catch ( FileNotFoundException e1 ) { e1.printStackTrace(); } catch ( IOException e ) { e.printStackTrace(); } finally { if ( server != null ) { server.close(); } } } public static void main( String[] args ) { try { Server server = new Server(); server.sendData(); } catch ( SocketException e ) { e.printStackTrace(); } } }
import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.util.Scanner; public class Client { private static final int CLIENT_PORT_NUM = 7000; private static final int SERVER_PORT_NUM = 6000; private static final int LENGTH_PER_TRANSMIT = 8888; private DatagramSocket client; private DatagramSocket urlSender; private String url; public Client() throws SocketException { client = new DatagramSocket( CLIENT_PORT_NUM ); urlSender = new DatagramSocket(); } public void receiveData() { sendURL(); File outputFile = new File( getDestURL() ); try { BufferedWriter bw = new BufferedWriter( new FileWriter( outputFile ) ); byte[] buff = new byte[ LENGTH_PER_TRANSMIT ]; DatagramPacket packet = new DatagramPacket( buff, buff.length ); client.receive( packet ); bw.append( new String( packet.getData(), 0, packet.getLength() ) ); } } catch ( IOException e1 ) { e1.printStackTrace(); } } public String getDestURL() { Scanner scanner = new Scanner( System.in ); System.out.println( "请输入目标文件的存储URL" ); return scanner.nextLine(); } private void sendURL() { getURL(); try { byte[] buff = url.getBytes(); DatagramPacket packet = new DatagramPacket( buff, buff.length, InetAddress.getByName( "localhost" ) , SERVER_PORT_NUM ); urlSender.send( packet ); } catch ( IOException e ) { e.printStackTrace(); } } private void getURL() { Scanner scanner = new Scanner( System.in ); System.out.println( "请输入指定文件url:"); url = scanner.nextLine(); } public static void main( String[] args ) { try { Client client = new Client(); client.receiveData(); } catch ( SocketException e ) { e.printStackTrace(); } }