TCP服务器客户端请验证我的代码是否异步工作? [英] TCP SERVER CLIENT Please Verify my code is this ashynchronously work ?
本文介绍了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屋!
查看全文