Socket Send и Recieve - C#
Формулировка задачи:
private void update_table() { Stopwatch sw = new Stopwatch(); sw.Start(); string[] status = rcon("83.221.178.248", 28960, "getstatus").Split(new string[] { "\n" }, StringSplitOptions.None); if (status[0] != "0") { datagrid.Items.Clear(); for (int i = 2; i < status.Length - 1; i++) { string[] player = status[i].Split(new string[] {"\""}, StringSplitOptions.None); string[] ints = player[0].Split(del, StringSplitOptions.None); Person item = new Person() { Name = player[1].Replace("\"", ""), Ping = Convert.ToInt32(ints[1]), Score = Convert.ToInt32(ints[0]) }; Person data = item; datagrid.Items.Add(data); } if (datagrid.Items.SortDescriptions.Count == 0) datagrid.Items.SortDescriptions.Add(new SortDescription("Score", ListSortDirection.Descending)); else { SortDescription sd = datagrid.Items.SortDescriptions[0]; datagrid.Items.SortDescriptions.Clear(); datagrid.Items.SortDescriptions.Add(sd); } } sw.Stop(); System.Windows.MessageBox.Show(sw.ElapsedMilliseconds.ToString()); } public string rcon(string gameServerIP, int gameServerPort, string command) { Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); client.SendTimeout = 1; client.ReceiveTimeout = 1; client.Connect(IPAddress.Parse(gameServerIP), gameServerPort); Byte[] bufferTemp = Encoding.ASCII.GetBytes(command); Byte[] bufferSend = new Byte[bufferTemp.Length + 5]; bufferSend[0] = Byte.Parse("255"); bufferSend[1] = Byte.Parse("255"); bufferSend[2] = Byte.Parse("255"); bufferSend[3] = Byte.Parse("255"); bufferSend[4] = Byte.Parse("02"); int j = 5; for (int i = 0; i < bufferTemp.Length; i++) { bufferSend[j] = bufferTemp[i]; j++; } IPEndPoint RemoteIpEndPoint = new IPEndPoint(IPAddress.Any, 0); client.Send(bufferSend, SocketFlags.None); Byte[] bufferRec = new Byte[64999]; try { client.Receive(bufferRec); } catch { return "0"; } finally { client.Close(); } string result = Encoding.ASCII.GetString(bufferRec).Replace("\0", ""); return result; } }
И ещё немогу зациклить update_table( Если в конец добавляю вызов себя всё просто наглухо виснет(
Решил проблему так
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (bw.IsBusy == false) bw.RunWorkerAsync(); else { while (bw.IsBusy == true) Thread.Sleep(2); if (bw.IsBusy == false) bw.RunWorkerAsync(); } }
Решение задачи: «Socket Send и Recieve»
textual
Листинг программы
public MainWindow() { InitializeComponent(); bw.DoWork += (s, e) => update("83.221.178.248", 28960, datagrid); bw.RunWorkerCompleted += (s, e) => { while (bw.IsBusy == true) Thread.Sleep(2); bw.RunWorkerAsync(); }; bw.RunWorkerAsync(); bw2.DoWork += (s, e) => update("127.0.0.1", 28960, datagrid_Copy); bw2.RunWorkerCompleted += (s, e) => { while (bw.IsBusy == true) Thread.Sleep(2); bw2.RunWorkerAsync(); }; bw2.RunWorkerAsync(); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д