我在client端传了100个包,结果在server端却显示只收到了64个包。
请问这个可能么?虽然UDP协议就是容易丢包能避免么?毕竟掉的太多了
谢谢~!
请问这个可能么?虽然UDP协议就是容易丢包能避免么?毕竟掉的太多了
谢谢~!
解决方案 »
- 哪位高手知道swing任务栏闪动怎么做
- 有java gui的基础ppt没,
- 关于JAVA在linux系统上创建多线程的问题,高手请进
- jsp中可否使用一组文本框进行提交,就如同checkbox的效果?
- 如果希望返回char* 类型数据的函数返回值都遵循同一规则(如果返回值长度为0,就返回null),用什么设计模式?
- wap乱码的问题
- 求助如何用把java生成的文件放到指定目录下
- Unsupported VM encoding MS936什么意思?
- 选书请教,新学java之路的迷茫,过来人请指点一下;
- 循环里面应该避免数据库操作吗
- 在一个系统中,如何判断一个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
}
}
}