C/S的程序,服务端为webservice,如何控制让前台打开一个窗口,其他用户便无法打开此窗口。本人新手菜鸟,请诸位大神写的详细一些~在此次谢过了

解决方案 »

  1.   

    打开的时候传一个值回去给服务端。然后其他人打开判断这个值是true还是false就行。
      

  2.   

     public partial class SockUDP : Component
        {
            public SockUDP()
            {
                InitializeComponent();
            }        public SockUDP(IContainer container)
            {
                container.Add(this);            InitializeComponent();
            }        private int UDP_Server_Port;//定义UDP端口
            private System.Threading.Thread thdUdp;//定义线程
            private IPEndPoint _Server = new IPEndPoint(IPAddress.Any, 0);//定义节点
            
            //定义组建的代理和事件
            public delegate void DataArrivalEventHandler(byte[] Data, IPAddress Ip, int Port);
            public event DataArrivalEventHandler DataArrival;        private UdpClient UDP_Server = new UdpClient();        public delegate void Sock_ErrorEventHandler(string ErrString);
            public event Sock_ErrorEventHandler Sock_Error;        [Browsable(true), Category("Client"), Description("获得对方IP地址与端口号等信息.")]
            
            public IPEndPoint Server
            {
                get { return _Server; }
                set { _Server = value; }
            }        //发送UDP数据
            public void Send(System.Net.IPAddress Host, int Port, byte[] Data)
            {
                try
                {
                    IPEndPoint server = new IPEndPoint(Host, Port);
                    UDP_Server.Send(Data, Data.Length, server);
                }
                catch (Exception e)
                {
                    if (Sock_Error != null)
                        Sock_Error(e.ToString());
                }
            }        //监听端口数据报
            public void Listen(int Port)
            {
                try
                {
                    UDP_Server_Port = Port;
                    UDP_Server = new UdpClient(Port);
                    thdUdp = new Thread(new ThreadStart(GetUDPData));
                    thdUdp.Start();//启动线程
                }
                catch (Exception e)
                {
                    if (Sock_Error != null)
                        Sock_Error(e.ToString());
                }
            }
            
            //获取网络数据
            private void GetUDPData()
            {
                while (true)
                {
                    try
                    {
                        byte[] RData = UDP_Server.Receive(ref _Server);
                        if (DataArrival != null)
                        {
                            DataArrival(RData, _Server.Address, _Server.Port);
                        }
                        Thread.Sleep(0);
                    }
                    catch (Exception e)
                    {
                        if (Sock_Error != null)
                            Sock_Error(e.ToString());
                    }
                }
            }        //关闭连接
            public void CloseSock()
            {
                try
                {
                    UDP_Server.Close();
                    thdUdp.Abort();
                }
                catch (Exception e)
                {
                    if (Sock_Error != null)
                        Sock_Error(e.ToString());
                }
            }
        }
    }