1st version that works
This commit is contained in:
@ -0,0 +1,109 @@
|
||||
package com.safemobile.lib.sound;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.DatagramPacket;
|
||||
import java.net.DatagramSocket;
|
||||
import java.net.InetAddress;
|
||||
import java.net.SocketException;
|
||||
import java.net.UnknownHostException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import com.safemobile.lib.SM;
|
||||
|
||||
public class UDPclient implements Runnable{
|
||||
|
||||
public String serverHostname = new String ("10.120.1.114");//
|
||||
private int UDP_SERVER_PORT_IN = 50002;
|
||||
private int UDP_SERVER_PORT_OUT = 50001;
|
||||
private DatagramSocket ds = null;
|
||||
private Thread listenThread;
|
||||
|
||||
private InetAddress serverAddr=null;
|
||||
private DatagramPacket dp_send = null;
|
||||
private DatagramPacket dp_recv = null;
|
||||
byte[] buffer = new byte[4096];
|
||||
|
||||
public Boolean isAlive = false;
|
||||
private List<IUDPListener> _listeners = new ArrayList<IUDPListener>();
|
||||
|
||||
public UDPclient(String ip)
|
||||
{
|
||||
SM.Debug("---UDPclient construcort---IP:"+ip);
|
||||
serverHostname = ip;
|
||||
try {
|
||||
serverAddr = InetAddress.getByName(serverHostname);
|
||||
ds = new DatagramSocket(UDP_SERVER_PORT_IN);
|
||||
dp_recv = new DatagramPacket(buffer, buffer.length);
|
||||
isAlive = true;
|
||||
} catch (UnknownHostException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
catch (SocketException e) {
|
||||
// TODO Auto-generated catch block
|
||||
e.printStackTrace();
|
||||
}
|
||||
listenThread = new Thread(this, "UDPclient");
|
||||
listenThread.start(); // (2) Start the thread.
|
||||
Send(new byte[]{1}, 1);
|
||||
SM.Debug("=====UDPclient construcort ===END====");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
while(isAlive)
|
||||
{
|
||||
try
|
||||
{
|
||||
ds.receive(dp_recv);
|
||||
//String msg = new String(buffer, 0, dp_recv.getLength());
|
||||
//SM.Debug("UDPclient recv b:"+dp_recv.getLength());
|
||||
_fireDataArrived(buffer,dp_recv.getLength());
|
||||
}
|
||||
catch (IOException e) {
|
||||
SM.Debug("break:"+e.toString());
|
||||
}
|
||||
/*
|
||||
try {
|
||||
Thread.sleep(1);
|
||||
} catch (InterruptedException e) {
|
||||
SM.Debug("break:"+e.toString());
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean Send(byte[] data,int len)
|
||||
{
|
||||
Boolean ret = true;
|
||||
|
||||
try
|
||||
{
|
||||
dp_send = new DatagramPacket(data, len, serverAddr, UDP_SERVER_PORT_OUT);
|
||||
ds.send(dp_send);
|
||||
}
|
||||
catch (IOException e) {
|
||||
SM.Debug("break:"+e.toString());
|
||||
ret = false;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
public synchronized void addUDPListener( IUDPListener l ) {
|
||||
_listeners.add( l );
|
||||
}
|
||||
|
||||
public synchronized void removeUDPListener( IUDPListener l ) {
|
||||
_listeners.remove( l );
|
||||
}
|
||||
|
||||
private synchronized void _fireDataArrived(byte[] data, int len) {
|
||||
UDPevent event = new UDPevent( this, data, len );
|
||||
Iterator<IUDPListener> listeners = _listeners.iterator();
|
||||
while( listeners.hasNext() ) {
|
||||
( (IUDPListener) listeners.next() ).dataRecv(event);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user