A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 乘鱼飞 中级黑马   /  2013-5-5 22:06  /  1320 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

发送端线程:
  1. import java.io.*;
  2. import java.net.*;
  3. public class Send extends Thread{
  4.         private DatagramSocket socket;
  5.         public Send(DatagramSocket socket)
  6.         {
  7.                 this.socket=socket;
  8.         }
  9.         @Override
  10.         public void run()
  11.         {
  12.                 try {
  13.                         BufferedReader br=new BufferedReader(new FileReader("E:/TestIP.java"));
  14.                         String line=null;
  15.                 while((line=br.readLine())!=null)
  16.                 {
  17.                         byte[] buf=line.getBytes();
  18.                         DatagramPacket packet=new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),10009);
  19.                     socket.send(packet);
  20.                 }
  21.                 } catch (FileNotFoundException e) {
  22.                         // TODO Auto-generated catch block
  23.                         e.printStackTrace();
  24.                 } catch (IOException e) {
  25.                         // TODO Auto-generated catch block
  26.                         e.printStackTrace();
  27.                 }
  28.         }
  29. }
复制代码
接收端线程:
  1. import java.io.*;
  2. import java.net.*;
  3. public class Receive extends Thread {
  4.         private DatagramSocket socket;
  5.         public Receive(DatagramSocket socket)
  6.         {
  7.                 this.socket=socket;
  8.         }
  9.         @Override
  10.         public void run()
  11.         {

  12.                         byte[] buf=new byte[1024];
  13.                         DatagramPacket packet=new DatagramPacket(buf,buf.length);
  14.                         try {
  15.                                 socket.receive(packet);
  16.                                 BufferedWriter bw=new BufferedWriter(new FileWriter("E:/aaa.txt"));
  17.                                
  18.                                 String data=null;
  19.                                 data=new String(packet.getData());

  20.                                 for(int i=0;i<packet.getLength();i++)
  21.                                 {
  22.                                         bw.write(data);
  23.                                         bw.newLine();
  24.                                         bw.flush();
  25.                                 }
  26.                         } catch (IOException e) {
  27.                                 e.printStackTrace();
  28.                         }
  29.         }
  30. }
复制代码
测试类:
  1. import java.net.DatagramSocket;
  2. import java.net.SocketException;

  3. public class TsetUDP {
  4.         public static void main(String[] args) throws Exception {
  5.                 DatagramSocket sendSocket=new DatagramSocket();
  6.                 DatagramSocket receiveSocket=new DatagramSocket(10009);
  7.         new Thread(new Send(sendSocket)).start();
  8.         new Thread(new Receive(receiveSocket)).start();
  9.         }
  10. }
复制代码
目的:(1)从发送端,把文件TestIP.java 发送到接收端
          (2)在接收端,接收文件并复制到 aaa.txt 中
现在只有接收端 搞不定
aaa.txt 中只有几行相同的数据,17行  import java.net.*;      

哪位大侠帮帮忙。。。。。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

1 个回复

倒序浏览
好吧,自己再冒个泡
接收端线程做了如下修改:因为,DatagramPacket传来的是字节所以我改为字节流,
文件是复制成功了,但每行数据都重复出现了三次,求助。。哪位大神知道怎么修改。。。。
接收端线程代码如下:
  1. import java.io.*;
  2. import java.net.*;

  3. public class Receive extends Thread {
  4.         private DatagramSocket socket;
  5.         public Receive(DatagramSocket socket)
  6.         {
  7.                 this.socket=socket;
  8.         }
  9.         @Override
  10.         public void run()
  11.         {

  12.                         byte[] buf=new byte[1024];
  13.                        
  14.                         try {
  15.                                 FileOutputStream fos = new FileOutputStream("E:/bbb.txt");  
  16.                                 BufferedOutputStream bos = new BufferedOutputStream(fos);  
  17.                                 DataOutputStream dos = new DataOutputStream(bos);  

  18.                                 int i;
  19.                                 DatagramPacket packet=new DatagramPacket(buf,buf.length);
  20.                                 while(true)
  21.                                 {
  22.                                         boolean j=false;
  23.                                         while(packet.getData().length!=0)
  24.                                         {
  25.                                                 dos.write(packet.getData());
  26.                                                 socket.receive(packet);
  27.                                                 j=true;
  28.                                         }
  29.                                 }
  30.                         } catch (IOException e) {
  31.                                 e.printStackTrace();
  32.                         }
  33.         }
  34. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马