private void Accept(IAsyncResult ia)
        {
            try
            {
                s = ia.AsyncState as Socket;                worker = s.EndAccept(ia);                s.BeginAccept(new AsyncCallback(Accept), s);                worker.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), worker);
            }
            catch 
            {             }
            
        }        private void Receive(IAsyncResult ia)
        {
            try
            {
                worker = ia.AsyncState as Socket;                int count = worker.EndReceive(ia);                if (count > 0)
                {
                    if (Program.ServiceType != 1)
                    {
                        worker.BeginReceive(buf, 0, buf.Length, SocketFlags.None, new AsyncCallback(Receive), worker);
                    }                    CheckData(count);
                }
            }
            catch 
            {            }
        }
        private void SendData(int Count)
        {
            worker.Send(ombuffer, Count, SocketFlags.None);            Program.LastClint = worker.RemoteEndPoint.ToString();            if (Program.ServiceType == 1)
            {
                worker.Close();
            }
        }        private void StartListen()
        {
            try
            {
                if (s != null)
                {
                    s.Close();
                }                Thread.Sleep(100);                s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);                iep = new IPEndPoint(IPAddress.Any, Program.Port);                s.Bind(iep);                s.Listen(6);                s.BeginAccept(new AsyncCallback(Accept), s);            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "出错了", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }

解决方案 »

  1.   

    这个是异步监听,在收到客户端发来的包后自动处理想回传数据直接worker.send就行了不过只能是一发一收的形式因为是异步的,不能判断当前具体都有哪些客户端在线
      

  2.   

    如果有需要广播的话,其实最好的办法是用udp
      

  3.   

    udp能给所有已连接服务端的客户端主动发消息嘛。