UDP传文件问题

zwhthinking 2012-10-27 09:05:00
我用UDP传文件

while(inFromFile.read(sendb) != -1){
DatagramPacket sendPacket = new DatagramPacket(sendb, sendb.length, ipAddr, port);
serverSocket.send(sendPacket);
}


其中,byte[] sendb = new byte[1024];

那我应该怎么接收?

byte[] b = new byte[1024];
DatagramPacket recvPacket = new DatagramPacket(b, b.length);
while(true){
clientSocket.receive(recvPacket);
}

我这样接收,却不知道怎么判断接收完毕。望指教!
...全文
180 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hbwhwang 2012-10-28
  • 打赏
  • 举报
回复
UDP传输,接收时不一定按顺序的,所以需给每个包打个标记,
服务器根据这些标记知道传输完成了没有
zhaoming262350 2012-10-27
  • 打赏
  • 举报
回复
给你两个代码,这样就可以实现了:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UdpTest1
{
public static void main(String[] args) throws Exception
{
DatagramSocket socket = new DatagramSocket();

String str = "hello world";

DatagramPacket packet = new DatagramPacket(str.getBytes(),
str.length(), InetAddress.getByName("localhost"), 7000);

socket.send(packet);

byte[] buffer = new byte[1000];

DatagramPacket packet2 = new DatagramPacket(buffer,100);

socket.receive(packet2);

System.out.println(new String(buffer, 0, packet2.getLength()));

socket.close();
}
}


import java.net.DatagramPacket;
import java.net.DatagramSocket;

public class UdpTest2
{
public static void main(String[] args) throws Exception
{
DatagramSocket socket = new DatagramSocket(7000);

byte[] buffer = new byte[1000];

DatagramPacket packet = new DatagramPacket(buffer, 1000);

socket.receive(packet);

System.out.println(new String(buffer, 0, packet.getLength()));

String str = "welcome";

DatagramPacket packet2 = new DatagramPacket(str.getBytes(),
str.length(), packet.getAddress(), packet.getPort());

socket.send(packet2);

socket.close();
}
}



Qing278916117 2012-10-27
  • 打赏
  • 举报
回复
boolean flag=true;
DatagramSocket socket=new DatagramSocket(4567);
byte[] b = new byte[1024];
DatagramPacket recvPacket = new DatagramPacket(b, b.length);
//这里可以起另一个线程来将flag设置为false,或者你定义一些相关的事件发生,执行方法把flag设置为false
while(flag){
socket.receive(recvPacket);
}
公子晴天 2012-10-27
  • 打赏
  • 举报
回复
你这样只能不停的收到包,做不了其他事情的,自己定义一下发送时候的格式,先通知服务器,你准备发送分片传输的文件了,总数是多少片,服务器收到后返回一个消息,告诉客户端已经准备好了,你可以开始发了,然后开始一片一片的发送过去,每一片发送时候最好都带个编号标志,服务器接收后按片组装起来,可以这样,每收一片就给客户端发一个确认,客户端收到确认后发下面的切片,全部发完后,给服务器再发一个标志,告诉服务器已经发送完成了,服务器组装分片的信息,然后合成完整的,额,,我前天刚好做了一个图片传输的功能,就是通过这样的机制实现的。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧