user1267113
user1267113

Reputation: 1

Java - Having trouble trying to create a simple File transfer service

As stated in my title, I'm trying to build a very simple file transfer service in java. Right now, all I have been able to do in construct a simple client/server that can send and receive strings of text. Here is the code:

UDPClient.java:

import java.io.*;
import java.net.*;
class UDPClient {
public static void main(String args[]) throws Exception
{
    BufferedReader inFromUser =
        new BufferedReader(new InputStreamReader
            (System.in));
    DatagramSocket clientSocket = new DatagramSocket();//port # is assigned by OS to the client
    InetAddress IPAddress = 
        InetAddress.getByName("localhost");
    byte[] receiveData = new byte[1024];
    String sentence = inFromUser.readLine();
    byte[] sendData = sentence.getBytes();
    DatagramPacket sendPacket =
        new DatagramPacket(sendData, sendData.length, 
                           IPAddress, 7777); //data with server's IP and server's port #
    clientSocket.send(sendPacket);
    DatagramPacket receivePacket =
        new DatagramPacket(receiveData,
                           receiveData.length);
    clientSocket.setSoTimeout(1000);
    clientSocket.receive(receivePacket);
    // we still need to catch the exception and retry
    String modifiedSentence =
        new String(receivePacket.getData(),
                   0,
                   receivePacket.getLength());
    System.out.println("FROM SERVER:" +
                       modifiedSentence);
    clientSocket.close();
    }
}

UDPServer.java

import java.io.*;
import java.net.*;
class UDPServer {
public static void main(String args[]) throws Exception
{
    DatagramSocket serverSocket = new
        DatagramSocket(7777); //server will run on port #9876
    byte[] receiveData = new byte[1024];
    while(true)
        {
            DatagramPacket receivePacket =
                new DatagramPacket(receiveData, 
                                   receiveData.length);
            serverSocket.receive(receivePacket);
            String sentence = new String(
                                         receivePacket.getData(),
                                         0,
                                         receivePacket.getLength());
            InetAddress IPAddress =
                receivePacket.getAddress(); //get client's IP
            int port = receivePacket.getPort(); //get client's port #
  System.out.println("client's port # =" + port);
   System.out.println("client'sIP =" +IPAddress);
   System.out.println("client's message =" +sentence);

            String capitalizedSentence = 
                sentence.toUpperCase();
            byte[] sendData = capitalizedSentence.
                getBytes();
            DatagramPacket sendPacket =
                new DatagramPacket(sendData,
                                   sendData.length, 
                                   IPAddress, port);
            serverSocket.send(sendPacket);
        }
    }
}

Ultimately what I'd like to do is send a file path to the server, have the server return the file, and then save it to a predetermined location like C:\Desktop\Folder.

I'm really at a loss for how to advance past where I am, so any advice, pointers, or resources that you could share would be great. I'm very new at this and feeling way out of my depth.

Thanks!

Upvotes: 0

Views: 566

Answers (1)

sgp15
sgp15

Reputation: 1280

Unlike TCP UDP uses a non-persistent connection. Therefore, you will have to maintain state in the request and response packets.

For example, the request packet could look as follows.

  • 2 bytes - File name length
  • (variable) - File name 4 bytes - Start position
  • 4 bytes - Seq. no.
  • 4 bytes - Max chunk size

Server will read upto 'Max chunk size' bytes from 'Start position' and return to client in following format. The Seq. no. will be echoed back from request so client can relate request with response.

  • 1 byte - Response code
  • 4 byte - Seq. no.
  • 4 bytes - Payload length
  • (variable) - Payload

Upvotes: 2

Related Questions