DELL
2025-03-03 812b869cd7e729ed81e737711e16e8e530e9a2c4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package sp_comm;
 
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.nio.ByteBuffer;
 
public class SocketComm {
    public static boolean Comm(String dev_ip, int dev_port, ByteBuffer bf_tx, ByteBuffer bf_rx)
    {
        boolean res_t = false;
        Socket socket = null;
        boolean S_thread_run_flag = true;
        ByteBuffer bytebuffer_for_socket_RX = bf_rx;
        bytebuffer_for_socket_RX.clear();
        try {
            socket = new Socket();
            socket.connect(new InetSocketAddress(dev_ip, dev_port), 2000);
            socket.setSoTimeout(2000);
            if(S_thread_run_flag) {
                InputStream in = socket.getInputStream();
                OutputStream out = socket.getOutputStream();
                //----------------- clear rx buff for tcp resend packet ----------------//
                byte[] rx_buf_t = new byte[1024];
                //----------------------------------------------------------------------//
                //--------------------- socket write -----------------------------------//
                //Date d1 = new Date();
                byte[] bf_tx_t = new byte[bf_tx.limit()];
                bf_tx.get(bf_tx_t);
                //System.out.println(ComFn.bytesToHexString(bf_tx_t, bf_tx_t.length));
                
                int rx_read_time_out = 0; 
                out.write(bf_tx_t);
                out.flush();
                
                while(true) {
                    if(in.available() > 0) { 
                        rx_read_time_out = 0; 
                        int rx_len_t = in.read(rx_buf_t);
                        if((bytebuffer_for_socket_RX.position()+rx_len_t) 
                                < (bytebuffer_for_socket_RX.capacity()-1)) {
                            bytebuffer_for_socket_RX.put(rx_buf_t, 0, rx_len_t);
                        }
                    } else {
                        rx_read_time_out += 1;
                        if((bytebuffer_for_socket_RX.position()>8) && (rx_read_time_out>10)){
                            res_t = true;
                            break;
                        }
                        
                        if(rx_read_time_out > 220) { 
                            break; 
                        } 
                    } 
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } 
                }
                
                bytebuffer_for_socket_RX.flip();
                /*
                Date d2 = new Date();
                long comm_tms = (d2.getTime() - d1.getTime());
                if(comm_tms < 200) {
                    Thread.sleep(200 - comm_tms);
                }
                */
                /*
                System.out.println(this.getName() 
                                    + "  dev_id:" + m_StatAndParam.dev_id
                                    + "  cmd:" + cmd
                                    + "  d2-d1:" + (comm_tms)+"ms"
                                    + "  rx_len:" + bytebuffer_for_socket_RX.limit()
                                    //+ "  tx_count:" + m_StatAndParam.m_FBS_VCData.m_SysState.CommCount
                                    //+ "  rx_err_sum:" + m_StatAndParam.m_FBS_VCData.m_SysState.ErrCommCount
                                    //+ "  rx_err_count:" + rx_errcount_for_live_of_thread
                                    + Com.getNowTimeWithAt());
                */
            }
            socket.close();
        } catch (IOException e) {
            //e.printStackTrace();
            try {
                socket.close();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        }
        
        return res_t;
    }
    /*********************************************************************************************/
}