Domanda

Ho un'applicazione di rete # c, dove un sacco di utenti anonimi connettersi al (servizio di gioco).

Ora controllare i registri e ogni tanto vedo questa eccezione:

[10:30:18.21352] System.Int32 Read(Byte[], Int32, Int32): The stream does not support reading.
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at BusinessLayer.Listener.ListenerWorker.ProcessClient(Object obj) in File.cs:line 141

Questo errore proviene da un oggetto NetworkStream, ora sto cercando di riprodurre il problema, ma come? Come posso ottenere questa eccezione?

Ho provato io stesso disconnessione, ma che dà solo un timeout, provato altre cose, ma non riesco a farlo funzionare.

Forse qualcuno ha un'idea?

Il contenuto del file è:

private static void ProcessClient(
    Object obj)
{
    ISession session = (ISession)obj;
    NetworkStream networkStream = null;

    try
    {
        DebugUtility.SetThreadName("Worker: {0}", session.Name);
        networkStream = session.TcpClient.GetStream();
        networkStream.ReadTimeout = Config.ReadTimeout;

        // Loop received packets (blocks untill next packet)
        Int32 packetSize;
        Byte[] buffer = new Byte[session.PacketSize];
        while ((packetSize = networkStream.Read(buffer, 0, buffer.Length)) != 0)
        {
            // Get String from packet  bytes
            String packet = Encoding.UTF8.GetString(buffer, 0, packetSize);

            // Check if packet has data
            if (String.IsNullOrEmpty(packet))
                continue;

            // Log biggest received package
            DebugUtility.CheckMaxPacketSize(session.Name, packet.Length);

            // Handle packet (in new thread)
            Logger.DebugLog("Received: {0}", packet);
            ThreadPool.QueueUserWorkItem(session.HandlePacket, packet);
        }
    }
    catch (Exception ex)
    {
        Logger.LogException(ex);
    }
    finally
    {
        if (networkStream != null)
            networkStream.Close();

        if (session != null)
            session.Disconnect();
    }
}
È stato utile?

Soluzione

Quali sono gli argomenti stai passando nel

System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
Metodo

. Si sta utilizzando qualsiasi di NetworkStream.Length o NetworkStream.Position Proprietà.

cioè è somthing come (non esattamente)

System.Net.Sockets.NetworkStream.Read(buffer, stream.Position, stream.Length)

poi come spiegato nella documentazione di MSDN uso di NetworkStream.Length e NetworkStream.Position proprietà sarà sempre buttare un NotSupportedException come la sua non sono attualmente supportate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top