【问题标题】:How to create a simple Server Client Application Using RUDP in Java?如何在 Java 中使用 RUDP 创建一个简单的服务器客户端应用程序?
【发布时间】:2014-06-01 18:54:51
【问题描述】:

我正在开发一个使用 UDP 在两台机器之间传输文件的简单应用程序,但结果证明这是有损且不可靠的,因此在搜索 Internet 时,我发现了这个名为 Simple Reliable UDP here 的项目,但他们没有没有任何文档或任何示例代码。因此,如果有人可以帮助我处理此代码,我将不胜感激,因为我是 Java 新手。我从编写简单的服务器客户端应用程序开始,但我得到地址已经绑定异常。为了清楚起见,我只想使用 UDP 连接,这就是我尝试实现 ReliableServerSocketReliableSocket 的原因。

  package stackoverflow;

  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.InputStreamReader;
  import java.util.logging.Level;
  import java.util.logging.Logger;
  import net.rudp.ReliableServerSocket;
  import net.rudp.ReliableSocket;

  /**
  *
  * @author Nika
  */
  public class udpServer implements Runnable{
  ReliableServerSocket rss;
  ///ocket rs;
  ReliableSocket rs;
  public udpServer() throws IOException {
  rss= new ReliableServerSocket(9876);
  }
  public void run(){
  while (true){
    try {
        rs=(ReliableSocket)rss.accept();
        System.out.println("Connection Accepted");
        System.out.println(""+rs.getInetAddress());
        BufferedReader  inReader = new BufferedReader (new InputStreamReader (rs.getInputStream()));
    //BufferedWriter  outReader = new BufferedWriter (new OutputStreamWriter (rs.getOutputStream()));

        String str= ""+inReader.readLine();

        if(str.contains("UPLOAD")){
            System.out.println("Client wants to upload file");
        }else if(str.contains("D1")){
            System.out.println("Client wants to download file");
       }



    } catch (IOException ex) {
        Logger.getLogger(udpServer.class.getName()).log(Level.SEVERE, null, ex);
    }

  }

  }

      public static void main(String args[]) throws Exception  
   {
      System.out.println("UDP Server Executed");
     Thread t= new Thread( new udpServer());
             t.start();
   }


 }

此处为客户端代码

      package stackoverflow;

      import java.io.BufferedWriter;
      import java.io.IOException;
      import java.io.OutputStreamWriter;
      import net.rudp.ReliableSocket;

      /**
      *
      * @author Nika
      */
     public class UdpFileClient {

     BufferedWriter outReader;
     ReliableSocket server;

    public UdpFileClient(boolean b1, boolean b2) throws IOException {

    if (b1) {
        server = new ReliableSocket("127.0.0.1", 9876);

        outReader = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
        outReader.write("D1");
        System.out.println("Download Req Sent From Client");
        server.close();
        outReader.flush();
        outReader.close();
    }

    if (b2) {
        server = new ReliableSocket("127.0.0.1", 9876);
        outReader = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
        outReader.write("UPLOAD");
        System.out.println("Upload Req Sent From Client");
        server.close();
        outReader.flush();
        outReader.close();
    }

}

public static void main(String args[]) throws Exception {
    System.out.println("UDP CLient Executed");
    new UdpFileClient(true, true);
}

}

我已经知道我可以使用 TCP/IP,但项目需要使用 UDP。如果有任何其他方式使用 UDP 以无损方式发送文件,速度很快也会有所帮助。

提前致谢!!

【问题讨论】:

    标签: java sockets udp udpclient rudp


    【解决方案1】:

    我尝试了 RUDP,发现我没有打印我的输出,我知道这是一个愚蠢的错误。

    UDP 客户端 包UDPClient;

      import java.io.IOException;
      import java.io.InputStream;
      import java.net.InetSocketAddress;
      import net.rudp.ReliableSocket;
    
      /**
      *
      * @author Nika
      */
      public class UDPtestc {
      ReliableSocket server;
       public UDPtestc() throws IOException {
         server = new ReliableSocket();
                server.connect(new InetSocketAddress("127.0.0.1", 9876));
        byte[] buffer = new byte[1024];
        int count,progress=0;
        InputStream in = server.getInputStream();
        while((count=in.read(buffer)) >0){
        progress+=count;
        System.out.println(""+progress);
        }
        server.close();            
        }
    
        public static void main(String[] args) throws IOException {
        new UDPtestc();
        }
    
        }
    

    UDP服务器

      package UDPServer;
    
      import java.io.FileInputStream; 
      import java.io.IOException;
      import java.io.OutputStream;
      import java.io.RandomAccessFile;
      import java.net.Socket;
      import java.util.logging.Level;
      import java.util.logging.Logger;
      import net.rudp.ReliableServerSocket;
      import net.rudp.ReliableSocket;
    
      /**
      *
      * @author Nika
      */
      public class UDPtests implements Runnable {
    
      ReliableServerSocket rss;
      ReliableSocket rs;
      String file;
    
      FileInputStream bin;
    
      public UDPtests() throws IOException {
        rss = new ReliableServerSocket(9876);
        Thread serverthread = new Thread(this);
        serverthread.start();
    
       }
    
       public void run() {
        while (true) {
            try {
                rs =  (ReliableSocket)rss.accept();
                System.out.println("Connection Accepted");
                System.out.println("" + rs.getRemoteSocketAddress());
    
                  file = "";
            Long size=0L;
                 file += "10MB.txt";
                    size+=10*1024*1024;
    
            RandomAccessFile r1= new RandomAccessFile(file,"rw");
            r1.setLength(size);
            byte[] sendData = new byte[1024];
    
            OutputStream os = rs.getOutputStream();
            //FileOutputStream wr = new FileOutputStream(new File(file));
            bin= new FileInputStream(file);
            int bytesReceived = 0;
            int progress = 0;
            while ((bytesReceived = bin.read(sendData)) > 0) {
                /* Write to the file */
                os.write(sendData, 0, bytesReceived);
                progress += bytesReceived;
                System.out.println(""+progress);
            }
    
    
    
            } catch (IOException ex) {
                Logger.getLogger(udpServer.class.getName()).log(Level.SEVERE, null, ex);
            }
    
        }
    }
    
    public static void main(String[] args) throws IOException {
        new UDPtests();
    }
    
    }
    

    如果可能的话,我很快就会在 RUDP 上发布其他 tuts。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 2012-09-11
      • 2015-12-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多