TCP服务器客户端请验证我的代码是否异步工作? [英] TCP SERVER CLIENT Please Verify my code is this ashynchronously work ?

查看:98
本文介绍了TCP服务器客户端请验证我的代码是否异步工作?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

public static List<ClientManager> Vehicles;
       //public static List<ClientUpdateData> ClientFirmware;
       private static BackgroundWorker bwListener;
       private static  TcpListener listenerSocket;
       /// <summary>
       /// Port used for connection
       /// </summary>
       public static Int32 Port;
       /// <summary>
       /// Flag used for connection
       /// </summary>
       public static  bool Status;
       /// <summary>
       /// event handler ClientConnected
       /// </summary>
       public static event ConnectedEventHandler ClientConnected = delegate { };
       /// <summary>
       /// event handler ClientDisconnected
       /// </summary>
       public static event DisconnectedEventHandler ClientDisConnected = delegate { };
       /// <summary>
       /// event handler DataReceived
       /// </summary>
       public static event DataReceivedEventHandler DataReceived = delegate { };
       /// <summary>
       /// event hanlder for notification
       /// </summary>
       public static event NotificationEventHandler OnNotificationReceived = delegate { };
       /// <summary>
       /// Starts a background thread that listen for TCP connection
       /// </summary>
       /// <param name="port"></param>
       /// <param name="status"></param>
       public static void Start( String port, String status)
       {
           Port = Convert.ToInt32(port);
           // Port = 14126;
           Status = Convert.ToBoolean(status);
           if (Status)
           {
               Vehicles = new List<ClientManager>();
               bwListener = new BackgroundWorker();
               bwListener.WorkerSupportsCancellation = true;
               //background worker that listens to the devices
               bwListener.DoWork += new DoWorkEventHandler(StartToListen);
               bwListener.RunWorkerAsync();
           }
       }


       /// <summary>
       /// No of vehicles connected
       /// </summary>
       public static Int32 VehicleCount
       {
           get { return Vehicles.Count; }
       }

       /// <summary>
       /// Starts a background thread that listens for a TCP connection
       /// </summary>
       public static void StartServer()
       {
           if (!Status)
           {
               bwListener = new BackgroundWorker();
               bwListener.WorkerSupportsCancellation = true;
               //background worker that starts to listen for devices
               bwListener.DoWork += new DoWorkEventHandler(StartToListen);
               bwListener.RunWorkerAsync();
               Status = true;
           }

       }
       /// <summary>
       /// Function that listens for the TCP connection and when connected creates a new client
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private static void StartToListen(object sender, DoWorkEventArgs e)
       {
           //starts listening to the specified port
           listenerSocket = new TcpListener(IPAddress.Any, Port);
           listenerSocket.Start();

           while (Status)
           {
               if (!listenerSocket.Pending())
               {
                   Thread.Sleep(500);
                   continue;
               }
               //creates a ClientManager object in case there is a device trying to connect to this port
              // CreateNewClientManager(listenerSocket.AcceptTcpClient());
               //  CreateNewClientManager(listenerSocket);
               listenerSocket.BeginAcceptTcpClient(AcceptTcpClientCallback, null);
           }
       }
       /// <summary>
       /// Creates a new client and assigns the event handlers
       /// </summary>
       /// <param name="socket"></param>
       private static void AcceptTcpClientCallback(IAsyncResult asyncResult)
       {
           TcpClient client = listenerSocket.EndAcceptTcpClient(asyncResult);
               listenerSocket.BeginAcceptTcpClient(AcceptTcpClientCallback, null);
               CreateNewClientManager(client);


       }




       private static void CreateNewClientManager(TcpClient socket)
       {
           //creates a object of ClientManager class and assign event handlers
           ClientManager newClientManager = new ClientManager(socket);
           newClientManager.CommandReceived += new PacketReceivedEventHandler(newPacketReceived);
           newClientManager.Disconnected += new DisconnectedEventHandler(ClientDisconnected);
           newClientManager.Connected += new ConnectedEventHandler(VehicleConnected);
           newClientManager.Notification +=new NotificationEventHandler(NotificationReceived);
           ClientConnected(null, new ClientEventArgs(newClientManager.Address, newClientManager.Address));
       }

推荐答案

参见 https://www.google.com/webhp?sourceid=chrome-instant& ion = 1& espv = 2& ie = UTF-8#q = async%20tcp%20c%23 [ ^ ]。


这篇关于TCP服务器客户端请验证我的代码是否异步工作?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆