gpt4 book ai didi

java - 如何在 Java 中使用 RUDP 创建一个简单的服务器客户端应用程序?

转载 作者:行者123 更新时间:2023-11-29 05:22:53 24 4
gpt4 key购买 nike

我正在开发一个使用 UDP 在两台机器之间传输文件的简单应用程序,但事实证明这是有损且不可靠的,因此在搜索 Internet 时我发现了这个名为 Simple Reliable UDP here 的项目。 ,但他们没有任何文档或任何示例代码。因此,如果有人可以帮助我处理这段代码,我将不胜感激,因为我是 Java 新手。我从编写简单的服务器客户端应用程序开始,但我得到地址已经绑定(bind)异常。明确地说,我只想使用 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 以无损方式以良好速度发送文件的任何其他方式也会有所帮助。

提前致谢!

最佳答案

我尝试了 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。

关于java - 如何在 Java 中使用 RUDP 创建一个简单的服务器客户端应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23983298/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com