通过SOCKET实现点对点的文件交换功能,包括有简单的握手、文件传输请求应答、出错重传等交互通信协议机制,提供简单的APPLICATION界面或命令行界面请高手给个建议,该如何设计,最好能给出关键部分代码

解决方案 »

  1.   

    import java.net.*;
    import java.io.*;
    import javax.swing.*;
    public class Client
    {
    private Socket you;
    SendData sends;
    JFileChooser select;
    File file;
    String address = null;
    public Client()
    {
    try
    {       select = new JFileChooser();
            System.out.println("输入服务器IP地址:");
            BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
            address = bin.readLine();
            while(address == "" || address.length() == 0 || address == null)
            {
             System.out.println("输入错误,请重新输入:(");
                address = bin.readLine();
             }
             bin.close();
        you = new Socket(address,2007);
    System.out.println("连接服务器监听端口:2007......");
    if(you != null)
    {
    System.out.println("连接服务器成功,请选择文件:>");
    select.showOpenDialog(null);
        file = select.getSelectedFile();
    new Thread(new SendData(you,file)).start();
    System.out.println("发送完毕!关闭线程...");
    }
    }catch(Exception e){System.out.println("服务端运行出错!");}
    }

    public static void main(String args[])
    {
    new Client();
    }
    }class SendData implements Runnable
    {
    private File files;
    private BufferedInputStream readFile = null;
    private DataInputStream din = null;
    private DataOutputStream dout = null;
    private Socket mySock = null;
    private String fileName;
    private byte data[] = new byte[1024];

    public SendData(Socket you,File file)
    {
    this.mySock = you;
    files = file;
    fileName = files.getName();
    }

     public void run()
     {
          try
         {
            readFile = new BufferedInputStream(new FileInputStream(files));
            din = new DataInputStream(new BufferedInputStream(mySock.getInputStream()));
                     dout = new DataOutputStream(new BufferedOutputStream(mySock.getOutputStream()));
                     dout.writeUTF(fileName);
    while((readFile.read(data)) != -1)
    {
    dout.writeInt(1);
    dout.write(data,0,data.length);
    dout.flush();
    }
    readFile.close();
    dout.writeInt(0);

    clears();
    }catch(Exception e){}
    finally
    {
    clears();
    }

    }

    void clears()
    {
    try
    {
    dout.close();
    din.close();
    mySock.close();
    }catch(Exception e){System.out.println("关闭出错");}
      }}
      

  2.   

    import java.net.*;
    import java.io.*;
    public class Server
    {
    private ServerSocket server;
    private Socket you;
    private receive rec;
    public Server()
    {
    try
    {
    server = new ServerSocket(2007);
      System.out.println("服务器运行中,监听端口:2007......");
    while(true)
    {
    you = server.accept();
    if(you != null)
    {
    System.out.println("有客户连接启动接收线程...");
    System.out.println("接收文件中......");
    new Thread(new receive(you)).start();

    }
    }
    }catch(Exception e){System.out.println("服务端运行出错!");}
    }

    public static void main(String args[])
    {
    new Server();
    }
    }class receive implements Runnable
    {
    private File files;
    private DataInputStream din = null;
    private DataOutputStream dout = null;
    private Socket mySock = null;
    private byte data[] = new byte[1024];
    public receive(Socket you)
    {
    this.mySock = you; }

     public void run()
     {
      try
      {
         din = new DataInputStream(new BufferedInputStream(mySock.getInputStream()));
        dout = new DataOutputStream(new BufferedOutputStream(mySock.getOutputStream()));
        String fileName = din.readUTF();
        BufferedOutputStream writeFile = new BufferedOutputStream(
                                              new FileOutputStream(fileName));
                       while(din.readInt() != 0)
        {
         din.read(data);
         writeFile.write(data,0,data.length);
        }
           writeFile.close();
    clears();
      System.out.println("接收文件完毕!--->服务器继续监听...");
    }catch(Exception e){System.out.println("接收出错!");}
    finally
    {
    clears();
    }

    }

    void clears()
    {
    try
    {
     dout.close();
     din.close();
     mySock.close();
             }catch(Exception e){System.out.println("关闭出错");}
      }}先运行Server 编译运行通过,参考下
    CSDN上面排版怎么这样了
      

  3.   

    frilly(秋◆水)  多谢了!
    这个怎么给分的啊,我是新手,不知道怎么操作