我的课程设计是编写了一个UDP SOCKET程序,将CLIENT上的一个文件(假设为abc.txt)传给SERVER。要求是可以设置UDP包的大小。abc.txt文件总共是846byte。我用sendPacket.setLength(512);设置成512BYTE的大小,这样理论上2个包就可以传完,但是传送给Server以后,Server也只能收到512byte的内容,剩下的就不见了,也就是说只收到了一个包。请问如何解决这个问题?核心代码贴在下面了。请朋友帮帮忙(能解决这个问题的得50分)
另50分:如何在client端得到单个UDP包的传送时间以及整个文件的传输时间?我需要得到start time, End time以及transfer time.最后得到speed kb/s. 请问有哪种方法可以做到这点?谢谢!//Client.java
DatagramSocket clientSocket = new DatagramSocket();
//将文件转化成byte保存
File filename = new File("C:\\abc.txt");
FileInputStream fileinputstream = new FileInputStream(filename);
BufferedInputStream inFromFile = new BufferedInputStream(fileinputstream);
byte[] sendData = new byte[1024];
inFromFile.read(sendData);
//设置UDP SOCKET
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort); sendPacket.setLength(512); //我用这个语句来设置包的大小为512BYTE
clientSocket.send(sendPacket);//Server.java
while(true){
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket); //接收从client来的数据System.out.println("File Byte:" + receivePacket.getLength() + '\n');//接收到的数据大小String sentenceFromServer = new String(receivePacket.getData());
System.out.println("From Server:" + sentenceFromServer + '\n'); //显示出数据内容
另50分:如何在client端得到单个UDP包的传送时间以及整个文件的传输时间?我需要得到start time, End time以及transfer time.最后得到speed kb/s. 请问有哪种方法可以做到这点?谢谢!//Client.java
DatagramSocket clientSocket = new DatagramSocket();
//将文件转化成byte保存
File filename = new File("C:\\abc.txt");
FileInputStream fileinputstream = new FileInputStream(filename);
BufferedInputStream inFromFile = new BufferedInputStream(fileinputstream);
byte[] sendData = new byte[1024];
inFromFile.read(sendData);
//设置UDP SOCKET
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort); sendPacket.setLength(512); //我用这个语句来设置包的大小为512BYTE
clientSocket.send(sendPacket);//Server.java
while(true){
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket); //接收从client来的数据System.out.println("File Byte:" + receivePacket.getLength() + '\n');//接收到的数据大小String sentenceFromServer = new String(receivePacket.getData());
System.out.println("From Server:" + sentenceFromServer + '\n'); //显示出数据内容
解决方案 »
- 最简单的java打印
- (关于eclipse生成javadoc)给分100
- 这个对象该如何new一个
- JAVA初学者请教各位高手一个问题,非常感谢!100分
- 时间Date间隔计算(如何计算现在的时间与表中字段timeA的时间间隔???),求教!
- 超级简单问题,在线等.数组数据类型转换
- 请问如何使用Access数据库
- 同步异步是指线程同步!异步................?以及相关的问题啊
- 大家谈一谈在网络中出现故障的可能以及基本的解决办法!
- 关于SCJP考试改版的问题!急急……
- JDK Class.isMemberClass() 中的基础类 指的是啥东东? 有人知道吗?
- 哪位大侠给看看这句话的意思?(多态调用递归)
DatagramSocket ds = new DatagramSocket(12345); //开始监视12345端口
DatagramPacket pack = new DatagramPacket(buf, buf.length);
//创建接收数据报
while (true) {
ds.receive(pack);
//阻塞,直到收到数据报后将数据装入IP中
System.out.print(new String(buf));
}
clientSocket.send(sendPacket);
----------
你这样发送显然是只发送了一个包,这个包原来数据是1024大的,可是你setLength(512);就截掉了后面的数据。
要想只发送512,要建立多个packet,每个都是512K
while(true){
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket); }to jFresH_MaN: 具体怎样实现呢?先用循环判断,然后再用setData(buffer,offerset,length)来设置么?在SERVER端如何合并?谢谢