Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.net.*;
- public class Sender extends Thread
- {
- private static final int PORT_NUMBER = 42730;
- private DatagramSocket sock;
- private String clientfile;
- private String targethost;
- private int windowsize;
- private int timeout;
- private int payload;
- public Sender(String clientfile, String targethost, int windowsize, int timeout, int payload)
- {
- try
- {
- this.clientfile = clientfile;
- this.targethost = targethost;
- this.windowsize = windowsize;
- this.timeout = timeout;
- this.payload = payload;
- }
- catch(Exception e)
- {
- System.out.println("Unable to set up sender.");
- }
- }
- public void run()
- {
- try
- {
- sock = new DatagramSocket();
- String file = new String("F:\\eclipse\\workspace\\Assignment\\test.txt");
- byte[] data = getBytesFromFile(file); //convert file into bytes
- ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
- DataOutputStream dos = new DataOutputStream(byteArray);
- int seqnum = 0; //initialize sequence number
- byte[] buffSend = new byte[payload]; //data to send
- byte[] buffReceive = new byte[4]; //ACK
- System.out.println("Sending to " + targethost);
- //yield thread here until there is data to send
- //increment sequence number
- seqnum++;
- //create packet
- Packet packet = new Packet(data, seqnum, payload);
- dos.write(packet.getBytes());
- buffSend = packet.getBytes();
- //construct packet and send
- DatagramPacket dp = new DatagramPacket(buffSend, buffSend.length, InetAddress.getLocalHost(), PORT_NUMBER);
- sock.send(dp);
- //set packet timeout
- //sock.setSoTimeout( timeout );
- //construct ACK
- //DatagramPacket rp = new DatagramPacket(buffReceive, buffReceive.length);
- //sock.receive(rp);
- //receive ACK;
- System.out.println("Sender sent packet #" + seqnum);
- }
- catch(Exception e)
- {
- System.out.println("Sender send packet failed: " + e.toString());
- }
- }
- private byte[] getBytesFromFile(String file) throws IOException
- {
- InputStream stream = new FileInputStream(file);
- long length = clientfile.length();
- byte[] bytes = new byte[(int)length];
- int offset = 0;
- int numRead = 0;
- while (offset < bytes.length && (numRead=stream.read(bytes, offset, bytes.length-offset)) >= 0)
- {
- offset += numRead;
- }
- if (offset < bytes.length) {
- throw new IOException("Could not completely read file "+clientfile);
- }
- stream.close();
- return bytes;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement