Пример #1
0
        private void AcceptTcpClientCallback(IAsyncResult ar)
        {
            TcpListener myListener = ar.AsyncState as TcpListener;
            TcpClient   client     = myListener.EndAcceptTcpClient(ar);

            OnReceiveMessage?.Invoke(new Message()
            {
                Name = "Server", Content = $"Connected {client.Client.RemoteEndPoint.ToString()}"
            });
            ReadWriteObject readWriteObject = new ReadWriteObject(client);

            rwoList.Add(readWriteObject);
            readWriteObject.BeginRead(ReadCallback);
            AcceptConnect();
        }
Пример #2
0
        private void ReadCallback(IAsyncResult ar)
        {
            ReadWriteObject readWriteObject = null;

            try
            {
                readWriteObject = ar.AsyncState as ReadWriteObject;
                int count = readWriteObject.EndRead(ar);

                if (count == 0)
                {
                    readWriteObject.Close();
                    readWriteObject = null;
                    return;
                }

                if (readWriteObject != null)
                {
                    if (count > 0)
                    {
                        DealWithFeedBack(readWriteObject, count);
                    }
                }
            }
            catch (Exception e)
            {
                if (readWriteObject != null)
                {
                    OnReceiveMessage?.Invoke(new Message()
                    {
                        Name = "ServerError", Content = $"{readWriteObject.RemoteEndPoint}已离线"
                    });
                    rwoList.Remove(readWriteObject);
                    readWriteObject.Close();
                    readWriteObject = null;
                }
                else
                {
                    OnReceiveMessage?.Invoke(new Message()
                    {
                        Name = "ServerError", Content = e.Message
                    });
                }
            }

            if (readWriteObject != null)
            {
                try
                {
                    readWriteObject.BeginRead(ReadCallback);
                }
                catch (Exception e)
                {
                    OnReceiveMessage?.Invoke(new Message()
                    {
                        Name = "ServerError", Content = $"{readWriteObject.RemoteEndPoint}已离线"
                    });
                    if (readWriteObject != null)
                    {
                        rwoList.Remove(readWriteObject);
                        readWriteObject.Close();
                        readWriteObject = null;
                    }
                }
            }
        }