title: guide to a simple unicast android udp server with c# udp client
body: <p><strike>I want to create a very simple android UDP <b>Uni cast</b> server and a C# UDP client.Can we create server on android? if yes then what IP address should be given to c# client to be connected with android server?</strike></p>
  
  <p>Edit : I had completed the Uni-cast UDP server on my Android and uni-cast UDP client in C#.
  Server is sending DatagramPackets and client is receiving successfully. But the opposite is not happening, and there isn't any errors and exceptions. But I can't understand what's the problem in the code.</p>
  
  <p>Android Server :</p>
  
  <pre><code>public class MainActivity extends Activity {
  
  String myIP;
  final Integer myPort = 12345;
  
  String clientIP = "192.168.1.3"; 
  Integer clientPort = 54321;
  
  byte[] inBuffer,outBuffer;
  
  Button send, set;
  EditText sendMsg, receiveMsg, cip, cp;
  
  DatagramSocket me;
  
  AsyncTask&lt;Void, byte[], Void&gt; asyncReceiver;
  
  @Override
  protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
  
      send = (Button) findViewById(R.id.button1);
      sendMsg = (EditText) findViewById(R.id.editText1);
      receiveMsg = (EditText) findViewById(R.id.editText2);
  
      set = (Button) findViewById(R.id.button2);
      cip = (EditText) findViewById(R.id.editText3);
      cp = (EditText) findViewById(R.id.editText4);
  
      inBuffer = new byte[256];
      outBuffer = new byte[256];
  
      myIP = null;
      myIP = GetCurrentIP();
  
      if (myIP == null) {
          Msg("GetCurrentIP error.");
      } else {
          try {
              setTitle(myIP+"|"+InetAddress.getLocalHost());
          } catch (UnknownHostException e1) {
              // TODO Auto-generated catch block
              e1.printStackTrace();
          }
          if (!Bind()) {
              Msg("Bind() error.");
          } else {
  
              set.setOnClickListener(new OnClickListener() {
  
                  @Override
                  public void onClick(View v) {
                      // TODO Auto-generated method stub
                      clientIP = cip.getText().toString();
                      clientPort = Integer.parseInt(cp.getText().toString());
                      Msg(clientIP+"|"+clientPort);
                  }
              });
  
              send.setOnClickListener(new OnClickListener() {
  
                  @Override
                  public void onClick(View v) {
                      // TODO Auto-generated method stub
                      outBuffer = sendMsg.getText().toString().getBytes();
                      SendToClient();
                  }
              });
  
              //-----------
              asyncReceiver = new AsyncTask&lt;Void, byte[], Void&gt;() {
  
                  @Override
                  protected void onProgressUpdate(byte[]... values) {
                      // TODO Auto-generated method stub
                      super.onProgressUpdate(values);
                      receiveMsg.append(new String(values[0]));
                  }
  
                  @Override
                  protected Void doInBackground(Void... params) {
                      // TODO Auto-generated method stub
                      try {
                          while(true){
                              inBuffer = new byte[256];
                              DatagramPacket pack = new DatagramPacket(inBuffer, inBuffer.length, InetAddress.getByName(clientIP), clientPort);
                              me.receive(pack);
                              publishProgress(inBuffer);
                              Thread.sleep(500);
                          }
                      } catch (Exception e) {
                          // TODO: handle exception
                          Msg(e.getMessage());
                      }
                      return null;
                  }
              };
              //-----------
              asyncReceiver.execute(new Void[1]);
              Msg("Receiving started.");
  
          }
      }
  }
  
  
  
  private void SendToClient(){
      try {
          DatagramPacket pack = new DatagramPacket(outBuffer, outBuffer.length, InetAddress.getByName(clientIP), clientPort);
          me.send(pack);
          Msg("Sent successfully.");
      } catch (Exception e) {
          // TODO: handle exception
          Msg(e.getMessage());
      }
  }
  
  private boolean Bind(){
      try {
  //          DatagramChannel channel = DatagramChannel.open();
  //          me = channel.socket();
  //          //me = new DatagramSocket();
  //          SocketAddress localAddr = new InetSocketAddress(InetAddress.getByName(myIP), myPort);
  //          me.bind(localAddr);
              me = new DatagramSocket(myPort, InetAddress.getByName(myIP));
              Msg("Bound Successfully.");
              return true;
          } catch (SocketException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
              Msg(e.getMessage());
          } catch (UnknownHostException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
              Msg(e.getMessage());
          } catch (IOException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
          return false;
      }
  
  private String GetCurrentIP(){
      WifiManager wifiMgr = (WifiManager) getSystemService(WIFI_SERVICE);
      return Formatter.formatIpAddress(wifiMgr.getConnectionInfo().getIpAddress());
  }
  
  public void Msg(String msg){
      Toast.makeText(getApplicationContext(), msg, Toast.LENGTH_SHORT).show();
      Log.v("&gt;&gt;&gt;&gt;&gt;", msg);
  }
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.main, menu);
      return true;
  }
  }
  </code></pre>
  
  <p>c# client...</p>
  
  <pre><code>public partial class Form1 : Form
   {
        Socket me;
        EndPoint myEndPoint;
  
        byte[] inBuffer, outBuffer;
  
        EndPoint serverEP;
  
        private void SendToClient()
        {
             if (serverEP == null)
             {
                  serverEP = new IPEndPoint(IPAddress.Parse(textBoxsip.Text), int.Parse(textBoxsp.Text));
             }
             try
             {
                  lock (me)
                  {
                       outBuffer = new byte[256];
                       outBuffer = Encoding.Default.GetBytes(textBoxmsg.Text);
                       me.SendTo(outBuffer, serverEP);
                  }
                  Task.Run(() =&gt; MessageBox.Show("Sent"));
             }
             catch (Exception ex)
             {
                  MessageBox.Show(ex.Message);
             }
        }
  
        private String GetCurrentIP()
        {
            IPAddress[] ips = Dns.GetHostAddresses(Dns.GetHostName());
            var selectedIPs = from ip in ips
                              where ip.AddressFamily == AddressFamily.InterNetwork
                              select ip;
            return selectedIPs.First().ToString();
        }
  
        public Form1()
        {
             InitializeComponent();
  
             inBuffer = new byte[256];
             outBuffer = new byte[256];
        }
  
        private void Form1_Load(object sender, EventArgs e)
        {
             this.Text = GetCurrentIP();
  
             me = new Socket
             (
                  AddressFamily.InterNetwork,
                  SocketType.Dgram,
                  ProtocolType.Udp
             );
        }
  
        private void buttonBind_Click(object sender, EventArgs e)
        {
             try
             {
                  myEndPoint = new IPEndPoint(IPAddress.Parse(textBoxBip.Text), int.Parse(textBoxBp.Text));
                  me.Bind(myEndPoint);
                  Task.Run(()=&gt; MessageBox.Show("Bound Successfully."));
             }
             catch (Exception ex)
             {
                  MessageBox.Show(ex.Message);
             }
        }
  
        private void buttonReceiveFrom_Click(object sender, EventArgs e)
        {
             if (serverEP == null)
             {
                  serverEP = new IPEndPoint(IPAddress.Parse(textBoxsip.Text), int.Parse(textBoxsp.Text));
             }
             try
             {
                  me.BeginReceiveFrom
                  (
                       inBuffer,
                       0,
                       inBuffer.Length,
                       SocketFlags.None,
                       ref serverEP,
                       new AsyncCallback(onReceiveComplete),
                       null
                  );
             }
             catch (Exception ex)
             {
                  MessageBox.Show(ex.Message);
             }
        }
  
        private void onReceiveComplete(IAsyncResult ar)
        {
             try
             {
                  int nobs = me.EndReceiveFrom(ar, ref serverEP);
  
                  if (nobs &gt; 0)
                  {
                       AddtoListBox(Encoding.Default.GetString(inBuffer));
                  }
  
                  inBuffer = new byte[256];
  
                  me.BeginReceiveFrom
                  (
                       inBuffer,
                       0,
                       inBuffer.Length,
                       SocketFlags.None,
                       ref serverEP,
                       new AsyncCallback(onReceiveComplete),
                       null
                  );
             }
             catch (Exception ex)
             {
                  MessageBox.Show(ex.Message);
             }
        }
  
        private void AddtoListBox(String msg)
        {
             this.Invoke((Action)delegate(){listBox1.Items.Add(msg);});
        }
  
        private void buttonSendTo_Click(object sender, EventArgs e)
        {
             SendToClient();
        }
   }
  }
  </code></pre>