【发布时间】:2015-05-10 21:37:28
【问题描述】:
我知道 TCP 发送文件更好,但我有一个关于通过 udp 协议发送文件的作业。 C# 或 Java 中是否有关于发送文件的代码示例?
我有服务器-客户端示例来发送和接收消息。我尝试使用相同的方式发送文件,但未能成功。我可能需要一种算法来划分文件小部分并通过数据报发送它们,我有一个想法将部分的“md5”作为数组的标题来检查数据包是否丢失。
这是我的尝试,我在 java 中的服务器端;
// 1. creating a server socket, parameter is local port number
sock = new DatagramSocket(7777);
// buffer to receive incoming data
byte[] buffer = new byte[65536];
DatagramPacket incoming = new DatagramPacket(buffer, buffer.length);
byte []bigByteArray=new byte[1024*1024*1024*1024];
// 2. Wait for an incoming data
echo("Server socket created. Waiting for incoming data...");
ByteBuffer target = ByteBuffer.wrap(bigByteArray);
// communication loop
while(true)
{
try
{
sock.receive(incoming);
String s = new String(incoming.getData());
if(s=="finish") break;
target.put(incoming.getData());
}
catch(Exception e)
{
}
}
fos.write(bigByteArray);
fos.close();echo("RECIEVED");
还有我的客户端;
String s;
Path path=Paths.get("C:\\Users\\Toshiba\\Desktop\\aa.txt");
byte[] data = Files.readAllBytes(path);
try
{
sock = new DatagramSocket();
InetAddress host = InetAddress.getByName("localhost");
//take input and send the packet
byte [] part;
for (int i = -1; i < data.length; i=i+100)
{
if(sock.isConnected())
{
part=Arrays.copyOfRange(data,i+1,i+100 );
}
else i=i-100;
}
byte [] f="finish".getBytes();
DatagramPacket finalpac = new DatagramPacket(f ,f.length , host , port);
sock.send(finalpac);
}
提前谢谢你。
【问题讨论】:
-
'Could not succeed' 不是问题描述。
-
我很抱歉我的错误短语,我在尝试此代码时没有遇到编译器错误,但我也没有得到任何输入。我刚刚写了我试图通过 UDP 发送文件的方法。
标签: java network-programming udp