Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.*;
- import java.util.ArrayList;
- import java.net.*;
- public class Server
- {
- int seqNum = 1;
- File readFile = null;
- DatagramSocket serverSocket;
- ObjectInputStream is;
- Boolean hasTimedOut=false;
- int portNum=43730;
- //check file
- public void openFile(String theFile)
- {
- try
- {
- readFile = new File(theFile);
- }
- catch(Exception e)
- {
- System.out.println("File error");
- }
- }
- public void runServer(int theplSize, String tHost, int toValue)
- {
- try
- {
- ObjectOutputStream out = null;
- ObjectInputStream in=null;
- DatagramPacket dPacket = null;
- DatagramPacket dPacketEnd=null;
- Packet packetAck=null;
- serverSocket=new DatagramSocket();
- byte[] fileContent=null;
- FileInputStream fin = new FileInputStream(readFile);
- while(true)
- {
- try
- {
- //read from file
- if(!hasTimedOut)
- {
- //determine if the file is shorter than the payload size
- if(theplSize>readFile.length() && seqNum==1)
- {
- fileContent=new byte[(int)readFile.length()];
- }
- else if(theplSize<readFile.length())
- {
- fileContent=new byte[theplSize];
- }
- else
- {
- fileContent=new byte[fin.available()];
- }
- fin.read(fileContent);
- }
- //System.out.println("available: "+fin.available());
- //make packet
- Packet packetS = new Packet();
- packetS.setPayLoad(fileContent);
- //print payload
- // for(int i=0;i<packetS.getLength();i++)
- // {
- // System.out.print(packetS.getPayLoad()[i]);
- // }
- //checksum payload
- packetS.setCheckSum(packetS.getLength());
- System.out.println();
- // System.out.println("CheckSum: " + packetS.getCheckSum());
- // System.out.println("lenth of packet: "+packetS.getPayLoad().length);
- //increment seqNum
- packetS.setSeqNum(seqNum);
- System.out.println("SeqNum: " + packetS.getSeqNum());
- //make outputstream
- InetAddress address = InetAddress.getByName(tHost);
- ByteArrayOutputStream byteStream = new ByteArrayOutputStream(6400);
- ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
- os.flush();
- os.writeObject(packetS);
- os.flush();
- byte[] sendBuf = byteStream.toByteArray();
- dPacket = new DatagramPacket(sendBuf, sendBuf.length, address,portNum);
- serverSocket.send(dPacket);
- serverSocket.setSoTimeout(toValue);
- System.out.println("Object sent");
- //recieve ack packet
- byte[] recvBuf = new byte[6400];
- DatagramPacket packet = new DatagramPacket(recvBuf,recvBuf.length);
- serverSocket.receive(packet);
- ByteArrayInputStream byteStreamIn = new ByteArrayInputStream(recvBuf);
- is = new ObjectInputStream(new BufferedInputStream(byteStreamIn));
- //read Packet
- packetAck =(Packet)is.readObject();
- if (packetAck.getSeqNum()==seqNum)
- {
- seqNum++;
- }
- System.out.println("Got ack packet for packet number: "+ packetAck.getSeqNum());
- //check if payload was corrupted
- if(packetS.getCheckSum()==(packetAck.getCheckSum()))
- {
- System.out.println("Packet "+packetS.getSeqNum()+" was not corrupted.");
- hasTimedOut=false;
- }
- else
- {
- System.out.println("Packet "+packetS.getSeqNum()+" was corrupted.");
- hasTimedOut=true;
- }
- //check if file is done being transfered
- if(fin.available()==0)
- {
- Packet packetEnd = new Packet();
- packetEnd.setSeqNum(-1);
- ByteArrayOutputStream byteStreamEnd = new ByteArrayOutputStream(6400);
- ObjectOutputStream osEnd = new ObjectOutputStream(new BufferedOutputStream(byteStreamEnd));
- osEnd.flush();
- osEnd.writeObject(packetEnd);
- osEnd.flush();
- byte[] sendBufEnd = byteStreamEnd.toByteArray();
- dPacketEnd = new DatagramPacket(sendBufEnd, sendBufEnd.length, address,43730);
- serverSocket.send(dPacketEnd);
- serverSocket.setSoTimeout(toValue);
- System.out.println("End of File packet sent.");
- System.out.println();
- System.out.println("***Done transfering***");
- break;
- }
- }
- catch (SocketTimeoutException to)
- {
- System.out.println("Time Out");
- hasTimedOut=true;
- }
- catch (IOException ex)
- {
- ex.printStackTrace();
- }
- //close loop
- }
- is.close();
- serverSocket.close();
- }
- catch (Exception e)
- {
- e.printStackTrace();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement