我在client端传了100个包,结果在server端却显示只收到了64个包。
请问这个可能么?虽然UDP协议就是容易丢包能避免么?毕竟掉的太多了
谢谢~!
请问这个可能么?虽然UDP协议就是容易丢包能避免么?毕竟掉的太多了
谢谢~!
解决方案 »
- 114º03'15" 哪位兄弟帮我写个正则表达式
- 一些Java面试题,求答案
- Arraylist用法
- 弱问题,老师留的作业
- javac编译通过运行时 Exception in thread "main" java.lang.NoClassDefFoundError: SqlService
- 菜鸟初次使用包就出错,父老乡亲帮忙看看啊.
- 如何把一个list集合中的对象,按对象的一个属性排序
- 哪们朋友有mail.jar和activation.jar,做一个邮件系统时用到的,能不能发一份给我[email protected]
- 每次运行时,将针对该用户的数据放在临时表如-temTableA中,用完之后删除数据,安全上有问题吗?
- 紧急求救,大家帮我看看!在县等待!
- 在一个系统中,如何判断一个java对象没有被其他对象使用到?
- 如何使JToolBar设计时停靠在Frame的左(右)边框
我这个程序是client端在本地读取一个文件abc.bmp并且放到byte[]流里。然后用DatagramPacket.setData(sendData,offset,size)方法来进行分包,传送到Server。在Server端接收并且显示收到了多少个包。
我不知道程序错在哪一快,每次Client发送的UDP包远远多于Server接收到的。有朋友能帮我改一下么?谢谢!下面是所有程序并附带了解释://Client
import java.io.*;
import java.net.*;
import java.util.Date;public class UDPClient {
public static void main(String [] args) throws Exception { byte[] ip={(byte)127,(byte)0,(byte)0,(byte)1};
InetAddress serverIPAddress = InetAddress.getByAddress(ip); //set server's IP address
int serverPort = 9876; //set server's port DatagramSocket clientSocket = new DatagramSocket(); //create datagramsocket File filename = new File("c:\\abc.bmp"); //set file with path
System.out.println("File Name: " + filename.getName() + '\n');
System.out.println("File Length: " + filename.length() + " (bytes)" + '\n'); FileInputStream fileinputstream = new FileInputStream(filename);
//obtains input bytes from chosen file in a file system.
BufferedInputStream inFromFile = new BufferedInputStream(fileinputstream);
//create an internal buffer array
int filelength = (int)filename.length()*2;
byte[] sendData = new byte[filelength]; //set max data array size as two times file's length
inFromFile.read(sendData); //put file byte stream into data array Date d1 = new Date(); //get date before sending the first packet int size = 512; //set packet size
for(int offset=0; offset<filename.length(); offset=offset+size){ //loop, for sending packet
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverIPAddress, serverPort); //create datagram
sendPacket.setData(sendData,offset,size); //set data range of a packet and offset
clientSocket.send(sendPacket); //send data to client
} Date d2 = new Date(); //get date after sending the last packet
long transferTime = d2.getTime()-d1.getTime(); //get transfer time
System.out.print("Start Time: " + d1.getTime() + " (ms)" + '\n');
System.out.print("Sending Packet Size: " + size + " (bytes)" + '\n');
System.out.print("End Time: " + d2.getTime() + " (ms)" + '\n');
System.out.print("Transfer Time: " + transferTime + " (ms)"); clientSocket.close(); //close datagramsocket
}
}
//.
//.
//.
///Server
import java.io.*;
import java.net.*;public class UDPServer { public static void main(String[] args) throws Exception{
int serverPort = 9876; //set server's port as 9876.
DatagramSocket serverSocket = new DatagramSocket(serverPort); //create a datagramsocket
byte[] receiveData = new byte[2048]; //the max single packet size is 2048 DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
//set DatagramPacket
int i=0;
while(true){
serverSocket.receive(receivePacket); //receive packet from client
i=i+1;
System.out.println("The Number: " + i + " packet has been received" + '\n');
//the file has been divided by number of packets to transfer
System.out.println("Received Packet size: " + receivePacket.getLength() + '\n'); InetAddress IPAddress = receivePacket.getAddress(); // get client's IP
int port = receivePacket.getPort(); // get client's port
}
}
}