This is chatting program using etherframe packet.
I finished crc, gui , making packet and sending packet.
but I can't implement stop and wait timeout resend...
I can't implement it.. can anybody help me?

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import javax.swing.border.*; 
import java.io.*; 
import java.net.*; 

public class ChatJin implements Runnable, ActionListener { 
    private JFrame f; 
    private JScrollPane jsp,jrp,jmp; 
    private JTextArea jta,s,r,m; 
    private JTextField jtf; 
    private DefaultComboBoxModel model, model2;  
    private JTextField Smodel,Smodel2;
    private JComboBox jcb, jcb2, Sjcb, Sjcb2; 
    private JScrollBar jb; 

    private DatagramSocket server, client, resend;
    private DatagramPacket sinData, soutData; 
    private byte[] data = new byte[500]; 
    private InetAddress myInet;
    private int count=0;
    private int dport=0;



   public static void main(String args[]) { 

        ChatJin m = new ChatJin(); 
        m.go(); 
        Thread t = new Thread(m);
        t.start();  



    } 

    public ChatJin() { 
        //Find Local IP Address & Name
        try {
            InetAddress myInet=InetAddress.getLocalHost();
            System.out.println("My InetAddress "+myInet.getHostAddress()+" name "+myInet.getHostName());
        } catch(UnknownHostException e) { 
            System.out.println("InetAddress Error on Port "+8000+" Error code "+e); 
            e.printStackTrace(); 
        }    
        try { 
            //Listening          

            server = new DatagramSocket(8000,InetAddress.getLocalHost());  
            System.out.println("Datagram Server on "+server.getLocalAddress().getHostAddress()+" port "+server.getLocalPort());

        }  catch(UnknownHostException e) {
            System.out.println("Server Unknown Exception error"+e);
        } catch(SocketException e) { 
            System.out.println("Server Socket Error on Port "+dport+" Error code "+e); 
            e.printStackTrace(); 
        }    
        try { 
            //Sending 
            client = new DatagramSocket(dport,InetAddress.getLocalHost());
            System.out.println("Datagram Client on "+client.getLocalAddress().getHostAddress()+" port "+client.getLocalPort());
        } catch(IOException e) { 
            System.out.println("Client Socket Error on Port "+dport+" Error code "+e); 
            e.printStackTrace(); 
        }    

    } 





    public DatagramPacket EtherFrame(String infor) {         InetAddress inet = null; 
        byte[] outdata=new byte[1024];
        byte[] da=new byte[6];
        byte buf[] = new byte[1024];
        byte[] sa=new byte[6];
        byte[] llc=new byte[4];
        //da[0]=0x0f;
        System.arraycopy(da,0,outdata,0,6);

    /*  for(int i = 0; i < 6; i++)
            da[i] = outdata[i];

        for (int i = 0; i < da.length; i++) 
        System.out.format("%02X%s", da[i], (i < da.length - 1) ? "-" : "");
    */  /////////////////////////////////////////////////////


    //////////////////////////////////////////////////////////////////  Get mac
        try {       
            InetAddress myInet = InetAddress.getLocalHost();
            /*
             * Get NetworkInterface for the current host and then read the 
             * hardware address.
             */
            NetworkInterface ni = NetworkInterface.getByInetAddress(myInet);
            byte[] mac = ni.getHardwareAddress();
            /*
             * Extract each array of mac address and convert it to hexa with the 
             * following format 08-00-27-DC-4A-9E.
             */
            System.out.print("Source address :" ); 
            for (int i = 0; i < mac.length; i++) {              
                sa[5-i]=mac[i]; 
            //  da[i]=sa[i];

                        System.out.format("%02X%s", sa[5-i], (i < sa.length - 1) ? "-" : "");    
                        //  System.out.print(sa[i]);
            }   
        } catch (UnknownHostException e) {
            e.printStackTrace();    
        } catch (SocketException e) {
            e.printStackTrace();
        }
        System.arraycopy(sa,0,outdata,6,6);
        byte[] ty=new byte[2];
        //////////////////////////////////////////////////////////////////////////////////////////////
        ty[0] = outdata[12];
        ty[1] = outdata[13];
    // ty[0]=(byte)(160 & 0x000000ff); ty[1]=(byte)(2 & 0x000000ff);
    //  System.out.format("%02X", ty[0],ty[1] );
        System.arraycopy(ty,0,outdata,12,2);
        ////////////////////////////////////////////////////////////////////////////////////////
 //    llc[0]=0x43;    //LLC 
        for(int i = 14; i < 18; i++)
            llc[i - 14] = outdata[i];
        System.arraycopy(llc,0,outdata,14,4);
    ////////////////////////////////////////////////////////////////////////////////////////////////

             String ip = (String) Smodel.getText();   //.getText()
             // ip=(String) Smodel.getSelectedText();
        if(ip.equals(""))
        {                     // catch(NullPointerException ex)
            System.out.println("\nServer IP not setting");
            try { 
                ip=InetAddress.getLocalHost().getHostAddress(); 
            } catch(UnknownHostException ee) { 
                ee.printStackTrace(); 
            } 
        }
             System.out.println("Server IP string"+ip+".");
        addElement(ip.trim()); // set Server IP
        String up =(String) jcb.getSelectedItem();
        if(up!=null) {
            if(up=="\n")
                System.out.println("destination IP setting"+up+"."); //             addElement((String) up.trim());
             else System.out.println("what string"+up+"."); 
            }
        String dportstring = (String) Smodel2.getText();
        if(dportstring.equals(""))
                dportstring = (String) "8000"; //default port number 

        //System.out.println(dportstring);
        dport = (int) Integer.parseInt(dportstring);  //string output -> convert string to int ?

        int len=infor.getBytes().length;
        System.arraycopy(infor.getBytes(),0,outdata,18,len);


    String outdatanew = new String(outdata,0,len+18);

 int[] table = {
            0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
            0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
            0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
            0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
            0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
            0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
            0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
            0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
            0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
            0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
            0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
            0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
            0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
            0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
            0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
            0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
            0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
            0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
            0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
            0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
            0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
            0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
            0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
            0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
            0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
            0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
            0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
            0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
            0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
            0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
            0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
            0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
        };


        byte[] bytes = outdatanew.getBytes();
        int crc = 0xffffffff;
        for (byte b : bytes) {
            crc = (crc >>> 8) ^ table[(crc ^ b) & 0xff];
        }

        // flip bits
        crc = ~crc;

        System.out.println("CRC32 (via direct calculation) = " + Integer.toHexString(crc));

        byte[] crc32 = new byte[4];     //byte
    crc32[3] = (byte)(crc & 0xff);
    crc32[2] = (byte)((crc >> 8) & 0xff);
    crc32[1] = (byte)((crc >> 16) & 0xff);
    crc32[0] = (byte)((crc >> 24) & 0xff);

    System.out.println("CRC32 = " +crc32[3]+crc32[2]+crc32[1]+crc32[0]);
        System.arraycopy(crc32,0,outdata,18+len,4);
     System.arraycopy(outdata,0,buf,0,18+4+len);  //will use as resend packet///////////////////////////////////////////////////////

        try { 
            inet = InetAddress.getByName(ip); 
        } catch(Exception ex) { 
            ex.printStackTrace(); 
        } 
            return(new DatagramPacket(outdata,len+18+4,inet,dport));  

    }



    public void go() {  

        try { 
            f = new JFrame(InetAddress.getLocalHost().getHostAddress()); //WIndow Frame
        } catch(UnknownHostException e) { 
            e.printStackTrace(); 
        } 
        f.addWindowListener(new WindowAdapter() {  //Window icons: 
            public void windowClosing(WindowEvent e) { 
                if(client.isClosed()!=true) client.close(); //if we call Socket.close socket then exception occurs                if(server.isClosed()!=true) server.close();
                System.exit(0); 
            } 
        }); 

        /* Graphic
         * +--------------------------------------------+
         * | Server IP [         ] port [          ]    |
         * +--------------------------------------------+ jp (Sjp+jp2)
         * | Destination [             ] broadcast v    |
         * +--------------------------------------------+
         * | echo      |  Rx            | Monitoring    |mp
         * | box       |  box           | box           |
         * +--------------------------------------------+
         * | chatting box                               |jps
         * |                                            |
         * +--------------------------------------------+
        *           *   
         */
        Container c = f.getContentPane();  //
        EtchedBorder eb = new EtchedBorder(); //각 판넬의 겉 모양은 EtchedBoard로 구성 할 예정

        JPanel mp = new JPanel();  // 송신, 수신, 모니터링 판넬 (s+r+m)로 구성"Message Sent Received Monitoring"
        mp.setLayout(new GridLayout(1,3)); 
        s = new JTextArea();   //"Sent"전체 프레임의 중간에 있는 수신 메시지를 표시하는 프레임
        s.setEditable(false);   //메시지를 보여주는 곳으로 쓸 수 없음
        jsp = new JScrollPane(s); 
        r = new JTextArea();   //"Received"전체 프레임의 중간에 있는 수신 메시지를 표시하는 프레임
        r.setEditable(false);   //메시지를 보여주는 곳으로 쓸 수 없음
        jrp = new JScrollPane(r); 
        m = new JTextArea();   //"Monitered"전체 프레임의 중간에 있는 수신 메시지를 표시하는 프레임
        m.setEditable(false);   //메시지를 보여주는 곳으로 쓸 수 없음
        jmp = new JScrollPane(m); 
        mp.add(jsp,"Left"); mp.add(jrp,"Center"); mp.add(jmp,"Right"); 
        mp.setBorder(eb); 


        JPanel jp2 = new JPanel();  // 윈도우 기본 틀내에 존재하는 상위 North 판넬 
        jp2.setLayout(new GridLayout(1,4));  //첫번째 프레임네 서브 프레임으로 사용 (I+jcb)로 구성
        JLabel l = new JLabel("Destination"); 
        model = new DefaultComboBoxModel(); 
        jcb = new JComboBox(model); 
        jcb.setEditable(true); 
        JCheckBox checkButton = new JCheckBox("ARP"); //나중에 global 변수로 지정해서 다른 곳에서 활용가능하도록 함
        jp2.add(l,"West");       jp2.add(jcb,"Center");  jp2.add(checkButton,"East");
        jp2.setBorder(eb);  // 프레임 주변의 음양으로 가는 줄을 표시

        JPanel Sjp = new JPanel();  // 윈도우 기본 틀내에 존재하는 상위 North 판넬 
        Sjp.setLayout(new GridLayout(1,4));  //첫번째 프레임네 서브 프레임으로 사용 (I+jcb)로 구성
        JLabel S = new JLabel("Server IP"); 
        Smodel = new JTextField(16); 
//        Sjcb = new JComboBox(Smodel); 
//        Sjcb.setEditable(true); 
        JLabel S2 = new JLabel("   UDP port"); 
        Smodel2 = new JTextField(4); 
//        Sjcb2 = new JComboBox(Smodel2); 
//        Sjcb2.setEditable(true); 
        Sjp.add(S);       Sjp.add(Smodel); Sjp.add(S2); Sjp.add(Smodel2);
        Sjp.setBorder(eb);  // 프레임 주변의 음양으로 가는 줄을 표시

        JPanel jps = new JPanel();  // 전체 판넬 하단의 판넬 (Im+jtf)로 구성
        jps.setLayout(new BorderLayout()); 
        JLabel lm = new JLabel("Message"); //jsp 판넬 내의 글씨쓰는 옆에 존재하는 글씨창 이름
        jtf = new JTextField(); //jsp 판넬 중 글씨를 넣는 부분
        jps.add(lm,"West"); jps.add(jtf,"Center"); 
        jps.setBorder(eb);  // 프레임 주변의 음양으로 가는 줄을 표시

        JPanel jp = new JPanel(); //Server IP window와 Destination window를 합한 묶음, 자바에서는 여러개의 창을 만들때 묶음을 만들어 분할해야 한다,
        jp.setLayout(new GridLayout(2,1)); //두개의 가로줄로 수성
        jp.add(Sjp);
        jp.add(jp2);

        c.add(mp); 
        c.add(jp,"North"); 
        c.add(jps,"South"); 

        jtf.addActionListener(this); //waiting for keyboard input 
        f.setSize(300,200); 
        f.setVisible(true); 
    } 


    //TextField의 내용을 packet에 저장 하여 보내는 구현... 
    public void actionPerformed(ActionEvent e) { //Key board input에 의한 message 작성
        String mssg = jtf.getText(); 
        int acksequenceser=0; int acksequencecli=1;
        s.append(">> " + mssg+"\n"); 
        m.append(count++ +">> " + mssg+"\n"); 
        soutData = null; 
        try { 
//            inet = InetAddress.getByName(ip); 
            soutData = EtherFrame(mssg);  
            client.send(soutData);




            System.out.println("Send IP= "+soutData.getAddress()+", port= " +soutData.getPort());
        } catch(Exception ex) { 
            ex.printStackTrace(); 
        } 
        jtf.setText(""); 

    } 

    synchronized public void addElement(String ip) { 
        System.out.println(ip); 
        for(int i=0;i<model.getSize();i++) { 
            if(model.getElementAt(i).equals(ip))  { 
//                model.setSelectedItem(ip); 
                if(jb==null)        jb = jsp.getVerticalScrollBar(); 
                jb.setValue(jb.getMaximum());                
                return; 
            } 
        } 
        model.addElement(ip); 
        if(jb==null)        jb = jsp.getVerticalScrollBar(); 
        jb.setValue(jb.getMaximum());                
    } 





    //UDP packet을 Listen하는 Thread 

    public void run() { 
        byte[] rmsg = new byte[1024];
        byte[] rsvmsg = new byte[1024];
        byte[] da=new byte[6];
        byte[] sa=new byte[6];
        byte[] ty=new byte[2];
        byte[] llc=new byte[4];
        byte[] crc=new byte[4];
        int crc32;
    /////////////////////////////////////////////////////////////////////////////////////////////////////

        /////////////////////////////////////////////////////////////////////////////////////////////////////


        while(true) { 
            sinData = new DatagramPacket(data,data.length); 
                System.out.println("Listening..."); 
            try { 
                server.receive(sinData); 
            } catch(IOException e) { 
                System.out.println("Packet received I/O Error..."+", "+e); 
                e.printStackTrace(); 
            } 
                System.out.println("Packet received from..."+sinData.getAddress().getHostName()+", "+sinData.getPort()); 
                String addr = sinData.getAddress().getHostName(); 
                int pt =sinData.getPort();
                int len = sinData.getLength();
                rmsg=sinData.getData();
                System.arraycopy(rmsg,12,ty,0,2);
                System.arraycopy(rmsg,18,rsvmsg,0,len-18-4);
                String rsvData = new String(rsvmsg,0,len-18-4);
        System.arraycopy(rmsg,len-4,crc,0,4); 
        String rsvDatanew = new String(rmsg,0,len-4);
        //int로변환
        crc32 = (int)crc[3] & 0xff;
        crc32 += ((int)crc[2] << 8) & 0xff00;
        crc32 += ((int)crc[1] << 16) & 0xff0000;
        crc32 += ((int)crc[0] << 24) & 0xff000000;

        byte[] bytes = rsvDatanew.getBytes();

   int[] table = {
            0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
            0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
            0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
            0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
            0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
            0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
            0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
            0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
            0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
            0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
            0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
            0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
            0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
            0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
            0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
            0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
            0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
            0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
            0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
            0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
            0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
            0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
            0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
            0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
            0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
            0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
            0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
            0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
            0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
            0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
            0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
            0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
        };

//CRC32: 2bdd08e6 (OK)
        byte[] bytes2 = rsvDatanew.getBytes();
        int crc2 = 0xffffffff;
        for (byte b : bytes2) {
            crc2 = (crc2 >>> 8) ^ table[(crc2 ^ b) & 0xff];
        }

        // flip bits
        crc2 = crc2 ^ 0xffffffff;

            System.out.println("CRC32 (via direct calculation) = " + Integer.toHexString(crc2));

                System.out.println("Rsv Packet ="+rsvData);                          
                System.out.println("hostname = "+addr+" port= "+pt+" Data Type = 0x"+ty[1]+ty[0]);
        boolean a=(crc2==crc32);
        if(a){              
                    r.append("[ " + addr  + " ] " + rsvData  + "\n");      
                    m.append(count++ +"[ " + addr  + " ] " + rsvData  + "\nCRC\n(receive) :"+Integer.toHexString(crc2)+"\n(send):"+Integer.toHexString(crc32));
        }
        else{
            r.append("                                 ");
            m.append(count++ +"[ " + addr  + " ] " + rsvData  + "\nCRC Error!\n\n");
        }      
                addElement(addr); 
        } 
    } 
}

Edited 3 Years Ago by Reverend Jim: Fixed formatting

Use code tags and only post relevant code. I doubt that those huge tables of data are relevant. Your question also doesn't really make sense. What does "stop and wait timeout resend" mean?

Use code tags and only post relevant code. I doubt that those huge tables of data are relevant. Your question also doesn't really make sense. What does "stop and wait timeout resend" mean?

That means, if Timeout occured client should resend the packet again, I should post all source coz there are some parameters that you don't kno..
The thing i need is just Timeout resend which means if Timeout occured client resend the message again whethere there is ack or not.

This article has been dead for over six months. Start a new discussion instead.