I am making an iOS application in which it will access IP addresses through Modbus communication device by UDP socket program not all the IP addresses which is present in wifi as the project is already present in github. I have android code which is written in java the same base logic I need in objective-c platform . It's not working by j2objc converter either. Here is the code in java for android project as need the same code for iOS platform:
public void startTimerForNetworkAccess()
{
try{
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//System.out.println("TIMER starts");
getNetworkStatus();
}
}, 0, 5000);
}catch(IllegalStateException ise)
{
//ise.printStackTrace();
System.out.println("TIMER WAS CANCELLED");
}
}
public void getNetworkStatus()
{
asyncTaskNetworkStatusCheck = new AsyncTaskNetworkStatusCheck();
asyncTaskNetworkStatusCheck.execute();
}
// Async Task Class for Network status check
public class AsyncTaskNetworkStatusCheck extends AsyncTask<Void, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(Void... params) {
String status="";
try {
status = NetworkUtil.getNetConnectivityStatus(getActivity());
if(status.equals("Wifi enabled"))
{
if(timer != null)
{
//System.out.println("TIMER STOPPER");
timer.cancel();
timer = null;
}
}
System.out.println("STATUS:"+status);
} catch (Exception e) {
Log.e("Error: ", e.getMessage());
}
return status;
}
@Override
protected void onPostExecute(String networkStatus) {
try{
//Toast.makeText(getActivity(), ""+networkStatus, Toast.LENGTH_LONG).show();
if(networkStatus.equals("Wifi enabled"))
{
txt_net_error.setVisibility(View.GONE);
if(menu_save != null)
{
menuFlag = 0;
menu_progress.setActionView(R.layout.action_progressbar);
//menu_progress.expandActionView();
menu_progress.setVisible(true);
menu_save.setVisible(false);
menu_edit.setVisible(false);
//menu_load.setVisible(false);
}
discoverIpListView.setVisibility(View.VISIBLE);
discoverIpAddressAsyncTask();
}else if(networkStatus.equals("Mobile data enabled")){
//discoverIpListView.setVisibility(View.GONE);
//showPopDialog();
txt_net_error.setVisibility(View.VISIBLE);
try{
if(menuFlag != 1)
{
menuFlag = 1;
//menu_refresh.setVisible(true);
//menu_progress.setActionView(null);
//menu_progress.expandActionView();
//menu_progress.setVisible(false);
}
//menuFlag = 0;
//menu_refresh.setVisible(true);
if(timer == null)
{
startTimerForNetworkAccess();
}
}catch(NullPointerException npe){
npe.printStackTrace();
}
}else{
//discoverIpListView.setVisibility(View.GONE);
//showPopDialog();
menuFlag = 0;
menu_refresh.setVisible(true);
txt_net_error.setVisibility(View.VISIBLE);
if(timer == null)
{
startTimerForNetworkAccess();
}
}
}catch(NullPointerException npe){
if(timer != null)
{
timer.cancel();
}else{
timer = null;
}
startTimerForNetworkAccess();
}
}
}
public void discoverIpAddressAsyncTask()
{
discoverIpAsync = new DiscoverIpAsyncTask();
discoverIpAsync.execute("");
}
// Async Task Class
public class DiscoverIpAsyncTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... urls) {
setUDPBroadcast();
socketAccessCount = 0;
return null;
}
@Override
protected void onPostExecute(String result) {
//menu_progress.setActionView(null);
menu_progress.setVisible(false);
menu_save.setVisible(true);
menu_edit.setVisible(true);
//menu_load.setVisible(true);
if(!discoverIpAsync.isCancelled())
{
menuFlag = 1;
}else{
menuFlag = 2;
}
}
}
private int socketAccessCount = 0;
private int countLoop = 1;
**public boolean setUDPBroadcast()
{
DatagramSocket datagramSocket;
//DatagramPacket sendPacket;
// Find the server using UDP broadcast
try {
byte[] sendData = "pe identify".getBytes();
while(socketAccessCount < 5)
{
//Open a random port to send the package
datagramSocket = new DatagramSocket();
datagramSocket.setBroadcast(true);
datagramSocket.setSoTimeout(5000);
//while(IpAddr.size() < 20)
//System.out.println("SECOND TIME----------"+socketAccessCount);
if(discoverIpAsync.isCancelled())
{
}
while(countLoop <= 30)
{
if(!discoverIpAsync.isCancelled())
{
try {
//Try the 255.255.255.255 first
try {
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, InetAddress.getByName("255.255.255.255"), 505);
//System.out.println("SOCKET SENT");
datagramSocket.send(sendPacket);
//System.out.println(getClass().getName() + ">>> Request packet sent to: 255.255.255.255 (DEFAULT)");
} catch (Exception e) {
//System.out.println("DATAGRAM ERROR");
e.printStackTrace();
datagramSocket.close();
break;
}
// Broadcast the message over all the network interfaces
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
while (interfaces.hasMoreElements()) {
NetworkInterface networkInterface = (NetworkInterface) interfaces.nextElement();
if (networkInterface.isLoopback() || !networkInterface.isUp()) {
//System.out.println("LOOPBACK");
continue; // Don't want to broadcast to the loopback interface
}
for (InterfaceAddress interfaceAddress : networkInterface.getInterfaceAddresses()) {
InetAddress broadcast = interfaceAddress.getBroadcast();
if (broadcast == null) {
continue;
}
// Send the broadcast package!
DatagramPacket sendPacket1 = new DatagramPacket(sendData, sendData.length, broadcast, 505);
datagramSocket.send(sendPacket1);
//System.out.println(getClass().getName() + ">>> Request packet sent to: " + broadcast.getHostAddress() + "; Interface: " + networkInterface.getDisplayName());
}
}
//System.out.println(getClass().getName() + ">>> Done looping over all network interfaces. Now waiting for a reply!");
//Wait for a response
byte[] recvBuf = new byte[15000];
DatagramPacket receivePacket = new DatagramPacket(recvBuf, recvBuf.length);
try{
datagramSocket.receive(receivePacket);
}catch(SocketTimeoutException sto)
{
//System.out.println("SOCKET TIME OUT");
//datagramSocket.send(sendPacket);
break;
}
//We have a response
//System.out.println(getClass().getName() + ">>> Broadcast response from server: " + receivePacket.getAddress().getHostAddress());
//Check if the message is correct
//String message = new String(receivePacket.getData()).trim();
//if(message.equals("Solar Inverter"))
//{
if(!IpAddr.contains(""+receivePacket.getAddress().getHostAddress()) || IpAddr.isEmpty())
{
IpAddr.add(""+receivePacket.getAddress().getHostAddress());
//System.out.println(getClass().getName() + ">>> Broadcast response from server: " + receivePacket.getAddress().getHostAddress());
//SI_Count++;
if(getActivity() != null)
{
getActivity().runOnUiThread (new Thread(new Runnable() {
public void run() {
listAdapter.notifyDataSetChanged();
discoverIpListView.invalidateViews();
discoverIpListView.refreshDrawableState();
}
}));
}
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
//e.printStackTrace();
}
}
//}
countLoop++;
} catch (Exception e) {
e.printStackTrace();
}
}else{
//getTargetFragment().setMenuVisibility(false);
//menu_progress.setActionView(null);
//menu_progress.setVisible(false);
//discoverIpAddressAsyncTask();
if(menuFlag == 2)
{
}else{
menuFlag = 0;
}
System.out.println("CANCELLED");
return true;
}
}
if(IpAddr.size() > 0){}
//Close the port!
datagramSocket.close();
socketAccessCount++;
}
} catch (IOException ex) {
//Logger.getLogger(MainActivity.class.getName()).log(Level.SEVERE, null, ex);
//System.out.println(""+ex);
}
/*for(int i=0;i<IpAddr.size();i++)
{
System.out.println("IP:"+IpAddr.get(i));
}*/
return true;
}**