Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    [C#] chiarimento TcpListener.Start(int BACKLOG)

    Ciao a tutti

    Volevo per favore un chiarimento riguardo la funzione TcpListener.Start(int Backlog), dove Backlog è una variabile int che secondo microsoft definisce il numero massimo di connessioni in ingresso in attesa;
    ecco proprio su questo avevo dei dubbi su come funzionasse: cioè il TcpListener accetta la prima connessione e anche quelle successive (fino al raggiungimento di Backlog)? o no? in caso ci sia già una connessione accettata ed un terzo voglia fare un ping all'host questo come si comporta?

    spero di non aver fatto domande troppo stupide..

  2. #2
    up please

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    69
    Avevo utilizzo tempo fa, dovrebbe essere il numero di pending in coda, metti il limite a due e prova ad aprirne da due a tre, la terza non dovrebbe essere acceta, se ne chiudi una delle due aperte la terza che apri va a buon fine, spero di essermi spiegato

  4. #4
    ok, grazie per la risposta
    ma sei io sono un Client, e il Server è già in connessione con un altro, e io riesco a collegarmi lo stesso (perchè la coda di pending >= 2) devo attendere che il Server chiuda la prima connessione per poter comunicare e inviare dati (file) al Server?

  5. #5
    Ho fatto dei test con pending = 2,
    riesco a collegare ad un Server fino a 3 Client (il primo + altri 2 in coda), il problema che che tutti e 3 si collegano e tutti e 3 ottengono un NetworkStream ed con il metodo Write(..) inviano un byte al Server TUTTI E 3!
    ok il byte del primo Client verrà giustamente letto ma gli altri byte dei agli 2 Client in coda dove vanno?

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    69
    ma utilizzi la gestione multithreading ?

    altrimenti risponde a uno solo e mette in coda gli altri, che versione di framework utilizzi ?

  7. #7
    Niente multithreading nei test che ho fatto, ti metto qui sotto i sorgenti del Client e del Server:

    Client
    Codice PHP:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;


    namespace 
    ClientTCP_Tester
    {
        class 
    Program
        
    {
            static 
    void Main(string[] args)
            {
                
    Console.WriteLine("Client TCP");
                
    Console.WriteLine("Inserisci numero porta: ");
                
    int Port int.Parse(Console.ReadLine());
                
    string IP "192.168.0.5";
                
    TcpClient Client = new TcpClient();
                
    Client.Connect(IPAddress.Parse(IP), Port);

                
    NetworkStream Stream Client.GetStream();

                
    byte b = new byte();
                
    byte.Parse("1");

                
    Stream.WriteByte(b);

                
    Console.WriteLine("Finito");
                while (
    true)
                {
                    
    Thread.Sleep(5000);
                }
            }
        }


    Server
    Codice PHP:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    using System.Threading;


    namespace 
    ServerTCP_Tester
    {
        class 
    Program
        
    {
            static 
    void Main(string[] args)
            {
                
    Console.WriteLine("Server TCP");
                
    Console.WriteLine("Inserisci numero porta: ");
                
    int Port int.Parse(Console.ReadLine());
                
    string IP "192.168.0.5";
                
                
    TcpListener Server = new TcpListener(IPAddress.Parse(IP), Port);
                
    Server.Start(2);

                
    TcpClient Client Server.AcceptTcpClient();

                
    NetworkStream Stream Client.GetStream();

                
    Console.WriteLine("Finito");
                while (
    true)
                {
                    
    Thread.Sleep(5000);
                }
            }
        }

    Come vedi niente multithreading, nei test qui sopra ho usato .NET Framework 4.0 ma non credo sia questo il problema.. tu che dici?

    P.S. Come vedi dal codice io apro 3 Client e tutti e 3 inviano un byte al Server, è questo che non capisco

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    69
    La versione del framework l'avevo chiesta perchè con la versione 2.0 fare multithreading è stato un "bagno di sangue", dal tuo sorgente non capisco bene cosa tu debba fare, prova a guardare questo esempio che ho trovato se può essere utile per il tuo scopo, è spiegato abbastanza bene.

    http://www.codeproject.com/KB/IP/socketsincs.aspx

  9. #9
    i sorgenti che ti ho messo sono quelli che ho usato per fare i test e verificare il comportamento dei socket

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2010
    Messaggi
    69
    scusami non capisco il senso di questa prova, tu invii ad un server un byte, poi entrambi rimangono in sleep, come fai col secondo client a ricontattare il server ?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.