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;
|
}
|
/*********************************************************************************************/
|
}
|