1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > udp文件服务器 UDP客户端服务器文件传输

udp文件服务器 UDP客户端服务器文件传输

时间:2024-03-18 11:04:03

相关推荐

udp文件服务器 UDP客户端服务器文件传输

我想通过UDP将数据包从客户端发送到服务器。我面临的问题是,如果最后一个数据包大小小于我们正在读取的字节数组的大小,那么来自先前数据包的冗余数据将被附加到它。我试着只将最后一个数据包的正确部分复制到一个新的字节数组中,然后发送它,但客户端以某种方式发送错误的数据包。请任何人都可以指出我做错了什么。提前致谢。UDP客户端服务器文件传输

Client.java:

class client

{

static int serverPort;

static String filename;

public static void main(String args[]) throws SocketException, IOException

{

int count=0;

int MAX_SIZE = 1048;

DatagramSocket clientSocket = new DatagramSocket();

InetAddress IpAddress = InetAddress.getByName("localhost");

byte[] sendData = new byte[MAX_SIZE];

String filePath = "C:\\in.txt";

File file = new File(filePath);

FileInputStream fis = new FileInputStream(file);

int totLength = 0;

while((count = fis.read(sendData)) != -1) //calculate total length of file

{

totLength += count;

}

System.out.println("Total Length :" + totLength);

int noOfPackets = totLength/MAX_SIZE;

System.out.println("No of packets : " + noOfPackets);

int off = noOfPackets * MAX_SIZE; //calculate offset. it total length of file is 1048 and array size is 1000 den starting position of last packet is 1001. this value is stored in off.

int lastPackLen = totLength - off;

System.out.println("\nLast packet Length : " + lastPackLen);

byte[] lastPack = new byte[lastPackLen-1]; //create new array without redundant information

fis.close();

FileInputStream fis1 = new FileInputStream(file);

//while((count = fis1.read(sendData)) != -1 && (noOfPackets!=0))

while((count = fis1.read(sendData)) != -1)

{

if(noOfPackets<=0)

break;

System.out.println(new String(sendData));

DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IpAddress, 9876);

clientSocket.send(sendPacket);

System.out.println("========");

System.out.println("last pack sent" + sendPacket);

noOfPackets--;

}

//check

System.out.println("\nlast packet\n");

System.out.println(new String(sendData));

lastPack = Arrays.copyOf(sendData, lastPackLen);

System.out.println("\nActual last packet\n");

System.out.println(new String(lastPack));

//send the correct packet now. but this packet is not being send.

DatagramPacket sendPacket1 = new DatagramPacket(lastPack, lastPack.length, IpAddress, 9876);

clientSocket.send(sendPacket1);

System.out.println("last pack sent" + sendPacket1);

}

}

Server.java:

import java.io.*;

import .*;

class server

{

public static void main(String args[]) throws IOException

{

DatagramSocket serverSocket = new DatagramSocket(9876);

byte[] recData = new byte[1024];

int i =0;

FileWriter file = new FileWriter("C:\\Users\\ayushi\\Documents\\Semester 2\\Misc\\setups\\eclipse\\ip_1\\ip_second\\src\\out.txt");

PrintWriter out = new PrintWriter(file);

//BufferedOutputStream bos = new BufferedOutputStream(fos);

while(true)

{

//PrintWriter out = new PrintWriter(file);

DatagramPacket recPacket = new DatagramPacket(recData, recData.length);

serverSocket.receive(recPacket);

String line = new String(recPacket.getData());

System.out.println("\n Data: " + line);

out.println(line);

System.out.println("\nPacket" + ++i + " written to file\n");

out.flush();

}

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。