Здравствуйте. Есть проблема с пересылкой данных по udp. Слать от клиента к серверу я могу но как сделать, чтобы сервер каждый промежуток времени отсылал на все клиенты некую информацию? Вот код сервера | Код | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading;
namespace UDP_server { class Program { static int recv; static byte[] data = new byte[1024]; //данные, которые будут передаваться или приниматься static Socket mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); static IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050); static IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); static EndPoint Remote; static Thread t = new Thread(Reciver); static void Main(string[] args) { Remote = (EndPoint)(sender); mysocket.Bind(ipep); //запускаем бесконечный цикл, который будет принимать и отправлять данные //data = new byte[1024]; ////принимаем данные от клиента. recv содержир размер, т.е. количество принятых символов //recv = mysocket.ReceiveFrom(data, ref Remote); //string message = Encoding.ASCII.GetString(data, 0, recv); //Console.WriteLine(message); t.Start(); } static void Reciver() { while (true) { data = new byte[1024]; //принимаем данные от клиента. recv содержир размер, т.е. количество принятых символов recv = mysocket.ReceiveFrom(data, ref Remote); string message = Encoding.ASCII.GetString(data, 0, recv); Console.WriteLine(message); } } //функция _getHost для сервера отличается только портом. Вместо 9050, отправлять всегда будем на 9051 static private EndPoint _getHost(string text) { //вырезаем из строки только IP адрес формата IPv4 string host = text.Remove(text.IndexOf(":"), text.Length - text.IndexOf(":")); //создаем объект адреса. Переменная host уже имеет вид [0-255].[0-255].[0-255].[0-255] IPAddress hostIPAddress = IPAddress.Parse(host); //создаем конечную точку. В нашем случае это адрес сервера, который слушает порт 9051 IPEndPoint hostIPEndPoint = new IPEndPoint(hostIPAddress, 9051); EndPoint To = (EndPoint)(hostIPEndPoint); return To; }
} }
|
Нужно что то вроде функции | Код | Sender() { Thread.Sleep(5000); foreach(//вот нужно как то перебирать клментов и) { //слать инфу } }
|
А вот клиент | Код | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading;
namespace UDP_Client { class Program { static int recv; static byte[] data = new byte[1024]; //данные, которые будут передаваться или приниматься static Socket mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); static IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050); static IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); static EndPoint Remote; static Thread c = new Thread(Sender); static Thread a = new Thread(Reciver); static void Main(string[] args) {
mysocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
c.Start(); a.Start(); }
static void Sender() { while (true) { Console.WriteLine("Отправить серверу"); string text = Console.ReadLine(); data = Encoding.ASCII.GetBytes(text);
mysocket.SendTo(data, data.Length, SocketFlags.None, _getHost("127.0.0.1:1111")); } } static void Reciver() { while (true) { //вот тут как слушать? } }
//функция _getHost static private EndPoint _getHost(string text) { //вырезаем из строки только IP адрес формата IPv4 string host = text.Remove(text.IndexOf(":"), text.Length - text.IndexOf(":")); //создаем объект адреса. Переменная host уже имеет вид [0-255].[0-255].[0-255].[0-255] IPAddress hostIPAddress = IPAddress.Parse(host); //создаем конечную точку. В нашем случае это адрес сервера, который слушает порт 9050 IPEndPoint hostIPEndPoint = new IPEndPoint(hostIPAddress, 9050); EndPoint To = (EndPoint)(hostIPEndPoint); return To; }
} }
|
К нему как то нужно слушалку приделать. Нашел исходник удп чата но он сложный очень там 3 дня код разбирать, тут все проще) Подскажите?
|