コード例 #1
0
        public void Connect(IPAddress ip, int port)
        {
            NetLogger.LogInfo(logTag, $"Connecting to {ip}:{port}...");

            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.BeginConnect(ip, port, OnConnected, socket);
        }
コード例 #2
0
        void AcceptedClientConnection(Socket client)
        {
            clients.Add(client);

            IPEndPoint clientEndPoint = (IPEndPoint)client.RemoteEndPoint;

            NetLogger.LogInfo(logTag, $"New client connection accepted ({clientEndPoint.Address}:{clientEndPoint.Port})");

            OnClientConnect?.Invoke(this, new TcpNetworkEventArgs(client));

            StartReceiving(client);
        }
コード例 #3
0
 public override void Disconnect()
 {
     if (IsConnected)
     {
         NetLogger.LogInfo(logTag, "Disconnecting...");
         socket.BeginDisconnect(false, OnDisconnected, socket);
     }
     else
     {
         NetLogger.LogWarning(logTag, "Already disconnected.");
     }
 }
コード例 #4
0
        void OnDisconnected(IAsyncResult ar)
        {
            var socket = (Socket)ar.AsyncState;

            socket.EndDisconnect(ar);
            socket.Close();

            base.socket = null;

            NetLogger.LogInfo(logTag, "Disconnected.");

            TriggerOnDisconnect();
        }
コード例 #5
0
        protected override void DisconnectedByRemote(Socket socket)
        {
            try
            {
                IPEndPoint clientEndPoint = (IPEndPoint)socket.RemoteEndPoint;

                NetLogger.LogInfo(logTag, $"Client disconnected ({clientEndPoint.Address}:{clientEndPoint.Port})");
            }
            catch (Exception)
            {
                NetLogger.LogWarning(logTag, "TcpServerSocket::DisconnectedByRemote->Client disconnected.");
            }

            socket.Close();
            clients.Remove(socket);
            OnClientDisconnect?.Invoke(this, new TcpNetworkEventArgs(socket));
        }
コード例 #6
0
        public void Listen(int port, int backlog = 100)
        {
            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            try
            {
                socket.Bind(new IPEndPoint(IPAddress.Any, port));
                socket.Listen(backlog);
                IsConnected = true;

                NetLogger.LogInfo(logTag, $"Listening on port {port}...");

                Accept();
            }
            catch (Exception ex)
            {
                socket = null;
                NetLogger.LogError(logTag, $"Listen failed.message = {ex.Message}");
            }
        }
コード例 #7
0
        public override void Disconnect()
        {
            foreach (var client in clients)
            {
                client.BeginDisconnect(false, OnClientDisconnected, client);
            }

            if (IsConnected)
            {
                NetLogger.LogInfo(logTag, "Stopped listening.");

                IsConnected = false;
                socket.Close();
                TriggerOnDisconnect();
            }
            else
            {
                NetLogger.LogWarning(logTag, "Already disconnected.");
            }
        }
コード例 #8
0
        void OnConnected(IAsyncResult ar)
        {
            var socket = (Socket)ar.AsyncState;

            try
            {
                socket.EndConnect(ar);

                NetLogger.LogInfo(logTag, "Connected");

                OnConnect?.Invoke(this, null);

                StartReceiving(socket);
            }
            catch (Exception ex)
            {
                NetLogger.LogError(logTag, $"Connected failed .message = {ex.Message}");

                TriggerOnDisconnect();
            }
        }
コード例 #9
0
        protected void OnReceived(IAsyncResult ar)
        {
            var receiveVO = (ReceiveVO)ar.AsyncState;

            if (IsConnected)
            {
                var bytesReceived = receiveVO.socket.EndReceive(ar);

                if (bytesReceived == 0)
                {
                    NetLogger.LogInfo(logTag, "the length of bytes which was received from net is zero.the net was closed by remote");

                    DisconnectedByRemote(receiveVO.socket);
                }
                else
                {
                    NetLogger.LogInfo(logTag, $"Received {bytesReceived} bytes.");
                    TriggerOnReceive(receiveVO, bytesReceived);

                    Receive(receiveVO);
                }
            }
        }