Abdujaparov
21-05-2007, 14:05
Salve a tutti sto cercando di scrivere un programma che invia un messaggio in broadcast udp, attende le risposte degli utenti in ascolto (non so il numero di questi utenti a priori, il numero è variabile quindi pensavo di rimanere in ascolto per un periodo di tempo X) e poi risponde singolarmente ad alcuni utenti scelti secondo un criterio Y.
Per adesso sono riuscito ad inviare messaggi in broadcast in questo modo:
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 16000);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast,1);
string ricerca = "---C'E' QUALCUNO?";
Byte[] sendBytes = Encoding.ASCII.GetBytes(ricerca);
server.SendTo(sendBytes, RemoteIpEndPoint);
Il messaggio arriva senza problemi e poi mi metto in attesa sulla stessa socket:
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
Byte[] data = new Byte[1024];
int rcv = server.ReceiveFrom(data, ref Remote);
E ricevo la risposta da parte di un utente, fino ad ora ho provato con un solo utente in ascolto ma se gli utenti sono N come posso farlo stare in attesa per un periodo di tempo X? Io non so quanti sono gli utenti N quindi un for non lo posso usare e non è neanche detto che mi arrivino tutte le risposte, avevo pensato di ciclare sull'attesa per un periodo di tempo X però non so come potrei fare, qualcuno mi sa indicare un modo o una guida?
Passata questa parte per rispondere al singolo utente mi creo un nuovo socket ed invio la risposta più adeguata in questo modo:
sendBytes = Encoding.ASCII.GetBytes(file[1]);
Socket ascoltatore = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
ascoltatore.SendTo(sendBytes, Remote);
Questa parte funziona senza problemi, il mio dubbio è questo, mi conviene creare un altra socket o potrei riutilizzare la socket utilizzata in precedenza senza alcun timore?
Grazie, arrivederci.
Per adesso sono riuscito ad inviare messaggi in broadcast in questo modo:
IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Parse("255.255.255.255"), 16000);
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
server.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast,1);
string ricerca = "---C'E' QUALCUNO?";
Byte[] sendBytes = Encoding.ASCII.GetBytes(ricerca);
server.SendTo(sendBytes, RemoteIpEndPoint);
Il messaggio arriva senza problemi e poi mi metto in attesa sulla stessa socket:
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0);
EndPoint Remote = (EndPoint)(sender);
Byte[] data = new Byte[1024];
int rcv = server.ReceiveFrom(data, ref Remote);
E ricevo la risposta da parte di un utente, fino ad ora ho provato con un solo utente in ascolto ma se gli utenti sono N come posso farlo stare in attesa per un periodo di tempo X? Io non so quanti sono gli utenti N quindi un for non lo posso usare e non è neanche detto che mi arrivino tutte le risposte, avevo pensato di ciclare sull'attesa per un periodo di tempo X però non so come potrei fare, qualcuno mi sa indicare un modo o una guida?
Passata questa parte per rispondere al singolo utente mi creo un nuovo socket ed invio la risposta più adeguata in questo modo:
sendBytes = Encoding.ASCII.GetBytes(file[1]);
Socket ascoltatore = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
ascoltatore.SendTo(sendBytes, Remote);
Questa parte funziona senza problemi, il mio dubbio è questo, mi conviene creare un altra socket o potrei riutilizzare la socket utilizzata in precedenza senza alcun timore?
Grazie, arrivederci.