I am writing a simple code to send and receive data on a
udp socket.
the code works ok except for the data is getting received thrice .
I am new to this so bare with me... :)
Sendrer Code:
Socket
server = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram,
ProtocolType.Udp);
server.EnableBroadcast = false;
server.ExclusiveAddressUse = false;
IPEndPoint iep = new
IPEndPoint(IPAddress.Parse("224.100.0.1"),
9050);
byte[] data =
Encoding.ASCII.GetBytes(textBox1.Text.Trim());
server.SendTo(data,
iep);
server.Close();
}
private void
OnReceive(IAsyncResult ar)
{
try
{
UdpClient u = (UdpClient)((UdpState)(ar.AsyncState)).u;
IPEndPoint e = (IPEndPoint)((UdpState)(ar.AsyncState)).e;
UdpState s = new
UdpState();
s.e = e;
s.u = u;
Byte[] receiveBytes = u.EndReceive(ar,
ref e);
string receiveString =
Encoding.ASCII.GetString(receiveBytes);
s.e = e;
listBox1.Items.Add("Received:" +
receiveString + e.Address.ToString());
u.BeginReceive(new
AsyncCallback(OnReceive), s);
}
catch
(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void
Form1_Load(object sender,
EventArgs e)
{
CheckForIllegalCrossThreadCalls = false;//Will
remove later
}
private void
StartReceive_Click(object sender,
EventArgs eA)
{
IPEndPoint iep = new
IPEndPoint(IPAddress.Parse("224.100.0.1"),
9050);
IPEndPoint e = new
IPEndPoint(IPAddress.Any,
9050);
UdpClient u = new
UdpClient(e);
u.Client.Blocking
= false;
UdpState s = new
UdpState();
s.e = e;
s.u = u;
s.u.Client.DontFragment = true;
s.u.Client.Ttl =
1;
listBox1.Items.Add("listening for messages");
u.JoinMulticastGroup(IPAddress.Parse("224.100.0.1"));
u.BeginReceive(new
AsyncCallback(OnReceive), s);
}
public class
UdpState
{
public IPEndPoint
e;
public UdpClient
u;
}