Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.65 KB | None | 0 0
  1.    import java.io.*;
  2.    import java.util.ArrayList;
  3.    import java.net.*;
  4.  
  5.     public class Server
  6.    {
  7.         int seqNum = 1;
  8.       File readFile = null;
  9.         DatagramSocket serverSocket;
  10.         ObjectInputStream is;
  11.         Boolean hasTimedOut=false;
  12.         int portNum=43730;
  13.         //check file
  14.        public void openFile(String theFile)
  15.       {
  16.          try
  17.          {
  18.             readFile = new File(theFile);
  19.          }
  20.          catch(Exception e)
  21.          {
  22.             System.out.println("File error");
  23.          }      
  24.       }
  25.        
  26.        public void runServer(int theplSize, String tHost, int toValue)
  27.        {
  28.          try
  29.          {    
  30.            
  31.             ObjectOutputStream out = null;
  32.             ObjectInputStream in=null;
  33.            
  34.             DatagramPacket dPacket = null;
  35.                 DatagramPacket dPacketEnd=null;
  36.             Packet packetAck=null;
  37.                 serverSocket=new DatagramSocket();
  38.                 byte[] fileContent=null;
  39.            
  40.                 FileInputStream fin = new FileInputStream(readFile);
  41.                 while(true)
  42.                 {    
  43.             try
  44.             {              
  45.                    
  46.                         //read from file
  47.                    
  48.                     if(!hasTimedOut)
  49.                     {
  50.                        
  51.                         //determine if the file is shorter than the payload size
  52.                     if(theplSize>readFile.length() && seqNum==1)
  53.                     {
  54.                         fileContent=new byte[(int)readFile.length()];
  55.                     }
  56.                     else if(theplSize<readFile.length())
  57.                     {
  58.                         fileContent=new byte[theplSize];
  59.                     }
  60.                     else
  61.                     {
  62.                         fileContent=new byte[fin.available()];
  63.                     }
  64.                         fin.read(fileContent);
  65.                     }
  66.                //System.out.println("available: "+fin.available());
  67.                   //make packet
  68.                Packet packetS = new Packet();
  69.                packetS.setPayLoad(fileContent);
  70.                    
  71.                         //print payload
  72.                // for(int i=0;i<packetS.getLength();i++)
  73. //                  {
  74. //                      System.out.print(packetS.getPayLoad()[i]);
  75. //                  }
  76.                  
  77.                   //checksum payload
  78.                packetS.setCheckSum(packetS.getLength());
  79.                     System.out.println();
  80.               // System.out.println("CheckSum: " + packetS.getCheckSum());
  81.                 //  System.out.println("lenth of packet: "+packetS.getPayLoad().length);
  82.                  
  83.                   //increment seqNum
  84.                packetS.setSeqNum(seqNum);
  85.                     System.out.println("SeqNum: " + packetS.getSeqNum());
  86.  
  87.                  
  88.                   //make outputstream
  89.                InetAddress address = InetAddress.getByName(tHost);
  90.                ByteArrayOutputStream byteStream = new ByteArrayOutputStream(6400);
  91.                ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(byteStream));
  92.                os.flush();
  93.                os.writeObject(packetS);
  94.                os.flush();
  95.                  
  96.                byte[] sendBuf = byteStream.toByteArray();
  97.                dPacket = new DatagramPacket(sendBuf, sendBuf.length, address,portNum);
  98.                serverSocket.send(dPacket);
  99.                serverSocket.setSoTimeout(toValue);
  100.                System.out.println("Object sent");
  101.                
  102.                        
  103.                     //recieve ack packet
  104.                byte[] recvBuf = new byte[6400];
  105.                DatagramPacket packet = new DatagramPacket(recvBuf,recvBuf.length);
  106.                serverSocket.receive(packet);
  107.                ByteArrayInputStream byteStreamIn = new ByteArrayInputStream(recvBuf);
  108.                is = new ObjectInputStream(new BufferedInputStream(byteStreamIn));
  109.                
  110.                 //read Packet
  111.                packetAck =(Packet)is.readObject();
  112.                     if (packetAck.getSeqNum()==seqNum)
  113.                {
  114.                    seqNum++;
  115.                }
  116.                    
  117.                System.out.println("Got ack packet for packet number: "+ packetAck.getSeqNum());
  118.                     //check if payload was corrupted
  119.                if(packetS.getCheckSum()==(packetAck.getCheckSum()))
  120.                {
  121.                   System.out.println("Packet "+packetS.getSeqNum()+" was not corrupted.");
  122.                         hasTimedOut=false;
  123.                }
  124.                else
  125.                     {
  126.                   System.out.println("Packet "+packetS.getSeqNum()+" was corrupted.");
  127.                         hasTimedOut=true;
  128.                    }
  129.                
  130.                    
  131.                    
  132.                         //check if file is done being transfered
  133.                     if(fin.available()==0)
  134.                     {
  135.                        
  136.                         Packet packetEnd = new Packet();
  137.                         packetEnd.setSeqNum(-1);
  138.                         ByteArrayOutputStream byteStreamEnd = new ByteArrayOutputStream(6400);
  139.                      ObjectOutputStream osEnd = new ObjectOutputStream(new BufferedOutputStream(byteStreamEnd));
  140.                 osEnd.flush();
  141.                 osEnd.writeObject(packetEnd);
  142.                 osEnd.flush();
  143.                        
  144.                          byte[] sendBufEnd = byteStreamEnd.toByteArray();
  145.                  dPacketEnd = new DatagramPacket(sendBufEnd, sendBufEnd.length, address,43730);
  146.                  serverSocket.send(dPacketEnd);
  147.                     serverSocket.setSoTimeout(toValue);
  148.                  System.out.println("End of File packet sent.");
  149.                          System.out.println();
  150.                         System.out.println("***Done transfering***");
  151.                          break;
  152.                     }
  153.                    
  154.                                              
  155.             }
  156.             catch (SocketTimeoutException to)
  157.             {
  158.                    
  159.                     System.out.println("Time Out");
  160.                     hasTimedOut=true;
  161.                
  162.             }
  163.             catch (IOException ex)
  164.             {
  165.                ex.printStackTrace();
  166.             }
  167.                 //close loop
  168.                 }  
  169.                 is.close();
  170.                        
  171.                 serverSocket.close();
  172.          
  173.          }
  174.            
  175.            
  176.          catch (Exception e)
  177.          {
  178.             e.printStackTrace();
  179.          }
  180.            
  181.            
  182.       }
  183.          
  184.          
  185.        
  186.    }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement