在comboBox中列出的每个客户端上发送自动消息

时间:2015-09-30 21:53:17

标签: c# .net combobox client-server

我有一个客户端服务器程序。客户端连接到服务器后,客户端的IPAddress将存储到组合框中。如果我想向客户端发送消息(使用按钮),我只需要选择某个IP地址并发送我的消息。那只是为了测试。

我的主要目的是在连接到服务器后,我想(自动)向comboBox内的每个客户端发送相同的消息。如何让服务器向这些客户端发送消息?还检查是否有人连接,然后自动发送相同的消息。

这是自动发送相同信息的地方。

public void sendToClient() 
    {
        try
        {
          for(int i = 0; i < myComboBox.Items.Count; i++)
            {
                //string value = comboBox1.GetItemText(comboBox1.Items[i]);
                sendData(openedFile.ToString());
            }

        }
        catch (Exception ex)
        {
            output.Text += "Error.....\n " + ex.StackTrace;

        }
    }

然后是sendData()函数

private void sendData(String data)
        {
            IPAddress ipep = IPAddress.Parse(comboBox1.SelectedItem.ToString());
            Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            IPEndPoint ipept = new IPEndPoint(ipep, hostPort);
            NetworkStream nStream = tcpClient.GetStream();
            ASCIIEncoding asciidata = new ASCIIEncoding();
            byte[] buffer = asciidata.GetBytes(data);
            if (nStream.CanWrite)
            {
                nStream.Write(buffer, 0, buffer.Length);
                nStream.Flush();
            }
        }

1 个答案:

答案 0 :(得分:2)

我猜你可能会做以下事情:

1)使用不同的线程调用SendData。您将获得更高的性能和更少的延迟(见下文)。

2)我相信您可能会检测到您将IP添加到组合框中以进行上述调用 - 它总是比在组合框中检查整个IP更有效。例如:

  '  At some point of MODULE or top of form
  dim ListOfIPS as List(of String)

  '  At new connection event
  ListOFIPs.Add(IPNumber)
  Dim MyThread As Thread = New Thread(CType(Sub() SendData(IPNumber, MyCustomMessage), ThreadStart))
            MyThread.SetApartmentState(Threading.ApartmentState.MTA)
            MyThread.Start()

3)并且,如果你真的需要向连接的所有人发送消息,你可以尝试类似的事情:

  for each Guy as String in ListOfIPS
            Dim MyThread As Thread = New Thread(CType(Sub() SendData(Guy, MyCustomMessage), ThreadStart))
            MyThread.IsBackground = False
            MyThread.SetApartmentState(Threading.ApartmentState.MTA)
            MyThread.Start()
  next

4)如果你看到LIST(of T)的帮助,你会发现当它断开连接时如何定位和删除(或者只是将它变为空白字符串)一些IP ...