I am using system.Net.Socket to send and receive message from server to client.but am facing problem when multiple server broadcasting message then receiver program is being closed suddenly.
My server code for broadcasting is as follows..
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class Broadcst
{
public static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep1 = new IPEndPoint(IPAddress.Broadcast, 9050);
IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("192.168.1.255"), 9050);
string hostname = Dns.GetHostName();
byte[] data = Encoding.ASCII.GetBytes(hostname);
sock.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 1);
sock.SendTo(data, iep1);
sock.SendTo(data, iep2);
sock.Close();
}
}
My Receiver Code is as follows for the client...
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class RecvBroadcst
{
public static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
While(true){
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to receive...");
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}",
stringData, ep.ToString());
data = new byte[1024];
recv = sock.ReceiveFrom(data, ref ep);
stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}",
stringData, ep.ToString());
}
sock.Close();
}
}
So how can a client receive more than one broadcast messages when there is more than one server broadcasting?
when i send message again from server its throwing error like "Only one usage of each socket address (protocol/network address/port) is normally permitted"
i had Solved the issue with the change in my above code with following in receiver side.i was just binding socket every time so i am just now binding it once and iterate only incoming data every time from the specified port.
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
public class RecvBroadcst
{
public static void Main()
{
Socket sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
// int port_no=Convert.ToInt32(sock.RemoteEndPoint);
int portnumber = 9050;
sock = new Socket(AddressFamily.InterNetwork,
SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any,portnumber);
sock.Bind(iep);
EndPoint ep = (EndPoint)iep;
Console.WriteLine("Ready to receive...");
// int port_no = Convert.ToInt32(sock.RemoteEndPoint);
while (true)
{
byte[] data = new byte[1024];
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}",
stringData, ep.ToString());
//data = new byte[1024];
//recv = sock.ReceiveFrom(data, ref ep);
//stringData = Encoding.ASCII.GetString(data, 0, recv);
//Console.WriteLine("received: {0} from: {1}",
// stringData, ep.ToString());
data = null;
}
//portnumber--;
sock.Close();
}
}
I just got succeeded..thanks for the response.that helps a lot.