80,351
社区成员
发帖
与我相关
我的任务
分享
public class UDPComm {
private DatagramSocket socket;
DatagramPacket sPacket;
private byte[] udpRxData;
Future<?> rcvThread;
private static UDPComm single=null;
//静态工厂方法
public static UDPComm getInstance() {
if (single == null) {
single = new UDPComm();
}
return single;
}
public void InitSocket() {
if (socket == null) {
try {
socket = new DatagramSocket();
// socket.bind(null);
socket.setReuseAddress(true);
rcvThread = InvoiceApp.fixThreadPool.submit(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
byte[] rxData = new byte[2000];
DatagramPacket rcPkt = new DatagramPacket(rxData,
rxData.length);
while (true) {
//LogUtils.manprintf( "Manage UDP begin rcv:");
try {
socket.receive(rcPkt);
udpRxData = subBytes(rxData, 0, rcPkt.getLength());
CmdReceive.getInstance().AddRev(udpRxData);
ManageUtil.printByte(udpRxData, "rcvByte:" + udpRxData.length+" "+"rcv:");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
LogUtils.manprintf( "tx Manage udp ok");
} catch (SocketException e) {
// TODO Auto-generated catch block
LogUtils.manprintf( "SocketException:" + e);
e.printStackTrace();
}
}
}
public void DisConnectSocket()
{
try
{
if (socket != null)
{
socket.close();
socket = null;
}
if (sPacket != null)
sPacket = null;
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private static byte[] subBytes(byte[] src, int begin, int count) {
byte[] bs = new byte[count];
for (int i = begin; i < begin + count; i++)
bs[i - begin] = src[i];
return bs;
}
public boolean Send(byte[] buf) {
if (!InvoiceApp.netState) {
return false;
}
byte[] txData = buf;
int remotePort = ManageParam.getServerPort();
String url = ManageParam.getServerUrl();
ManageUtil.printByte(txData, "send txData:");
sPacket = null;
try {
sPacket = new DatagramPacket(txData, txData.length,
InetAddress.getByName(url), remotePort);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
if (sPacket != null) {
try {
socket.send(sPacket);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
public void SendUDPComm(BaseStru obj,byte[] buf,boolean IsNeedResponse)
{
if(buf==null)
{
return;
}
SendBufStru stru=new CmdStru().new SendBufStru();
stru.buf=buf;
stru.Obj=obj;
if(IsNeedResponse)
{
ReSend.getInstance().AddReSend(stru);
}
if(UDPComm.getInstance().Send(stru.buf))
{
//LogUtils.manprintf("Send Data,FlowNum="+obj.FlowNum);
}
}
}