我最近在做一个课程设计,里面设计到用socket进行传输文件,我用的udp传输文件,这样要快一点,但是没想到当我传输的文件大于20M的时候就开始出问题了,大家有好点的用udp传输文件的例子吗?最好是能把思路说说,呵呵! 
   最近搞多线程,脑壳都搞大了!

解决方案 »

  1.   

    import java.net.*;
    import javax.swing.*; 
    import java.awt.event.*;
    class 主机1Frame extends JFrame implements Runnable,ActionListener
    {  JTextField out_message=new JTextField("发送数据到主机2:");
       JTextArea in_message=new JTextArea(); 
       JButton b=new JButton("发送数据包到主机2");
       主机1Frame()
       {  super("我是主机1");
          setSize(200,200);setVisible(true);
          b.addActionListener(this);
          add(out_message,"South");add(in_message,"Center");add(b,"North");
          Thread thread=new Thread(this);
          thread.start();//线程负责接收数据包
       }
       public void actionPerformed(ActionEvent event) //点击按扭发送数据包
       {  byte buffer[]=out_message.getText().trim().getBytes();
          try{  InetAddress address=InetAddress.getByName("127.0.0.1");
    DatagramPacket data_pack=
    new DatagramPacket(buffer,buffer.length, address,888);
                DatagramSocket mail_data=new DatagramSocket();
                in_message.append("数据报目标主机地址:"+data_pack.getAddress()+"\n");
                in_message.append("数据报目标端口是:"+data_pack.getPort()+"\n");
                in_message.append("数据报长度:"+data_pack.getLength()+"\n");
                mail_data.send(data_pack);
              }
          catch(Exception e){}     
       } 
       public void run() //接收数据包
       {  DatagramPacket pack=null;
          DatagramSocket mail_data=null;
          byte data[]=new byte[8192];
          try{  pack=new DatagramPacket(data,data.length);
                mail_data=new DatagramSocket(666);
             }
          catch(Exception e){} 
          while(true)   
             {  if(mail_data==null) break;
                else
                   try{  mail_data.receive(pack); 
                         int length=pack.getLength();
                         InetAddress adress=pack.getAddress();
                         int port=pack.getPort();
                         String message=new String(pack.getData(),0,length);
                         in_message.append("收到数据长度:"+length+"\n");
                         in_message.append("收到数据来自:"+adress+"端口:"+port+"\n");
                         in_message.append("收到数据是:"+message+"\n");
                      }
                   catch(Exception e){}
             } 
       }
    }
    public class 主机1
    {  public static void main(String args[])
       {  主机1Frame 主机1win=new 主机1Frame();
          主机1win.validate();
       }
    }import java.net.*;
    import javax.swing.*; 
    import java.awt.event.*;
    class 主机2Frame extends JFrame implements Runnable,ActionListener
    {  JTextField out_message=new JTextField("发送数据到主机1:");
       JTextArea in_message=new JTextArea(); 
       JButton b=new JButton("发送数据包到主机1");
       主机2Frame()
       {  super("我是主机2"); 
          setSize(200,200);setVisible(true);
          b.addActionListener(this);
          add(out_message,"South");add(in_message,"Center");add(b,"North");
          Thread thread=new Thread(this);
          thread.start();//线程负责接收数据包
       }
       public void actionPerformed(ActionEvent event)
       {  byte buffer[]=out_message.getText().trim().getBytes();
          try{  InetAddress address=InetAddress.getByName("127.0.0.1");
    DatagramPacket data_pack=
    new DatagramPacket(buffer,buffer.length, address,666);
                DatagramSocket mail_data=new DatagramSocket();
                in_message.append("数据报目标主机地址:"+data_pack.getAddress()+"\n");
                in_message.append("数据报目标端口是:"+data_pack.getPort()+"\n");
                in_message.append("数据报长度:"+data_pack.getLength()+"\n");
                mail_data.send(data_pack);
             }
           catch(Exception e){}   
       } 
       public void run()
       {  DatagramSocket mail_data=null;
          byte data[]=new byte[8192];
          DatagramPacket pack=null;
         try{
               pack=new DatagramPacket(data,data.length);
               mail_data=new DatagramSocket(888);
             }
         catch(Exception e){} 
         while(true)   
           {  if(mail_data==null) break;
              else
               try{  mail_data.receive(pack); 
                     int length=pack.getLength();
                    InetAddress adress=pack.getAddress();
                    int port=pack.getPort();
       String message=new String(pack.getData(),0,length);
                    in_message.append("收到数据长度:"+length+"\n");
                    in_message.append("收到数据来自:"+adress+"端口:"+port+"\n");
                    in_message.append("收到数据是:"+message+"\n");
                  }
               catch(Exception e){}
           }
       }
    }
    public class 主机2
    {   public static void main(String args[])
       {  主机2Frame 主机2win=new 主机2Frame();
           主机2win.validate();
       }
    }