Torna indietro   Hardware Upgrade Forum > Software > Programmazione

NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT
Nelle ultime settimane abbiamo provato tre delle proposte top di gamma di NZXT nelle categorie case, dissipatori e ventole. Rispettivamente, parliamo dell'H9 Flow RGB+, Kraken Elite 420 e F140X. Si tratta, chiaramente, di prodotti di fascia alta che si rivolgono agli utenti DIY che desiderano il massimo per la propria build. Tuttavia, mentre i primi due dispositivi mantengono questa direzione, le ventole purtroppo hanno mostrato qualche tallone d'Achille di troppo
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz
ASUS ROG Swift OLED PG34WCDN è il primo monitor gaming con pannello QD-OLED Gen 5 a layout RGB Stripe Pixel e 360 Hz su 34 pollici: lo abbiamo misurato con sonde colorimetriche e NVIDIA LDAT. Ecco tutti i dati
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 26-05-2009, 17:26   #1
SUPERALEX
Senior Member
 
L'Avatar di SUPERALEX
 
Iscritto dal: May 2006
Città: Vergiate (VA)
Messaggi: 4315
[C#]PROBLEMA CON SEMPLICE CHAT

Sto facendo una chat client-server facile ovvero server ascolta client si connette iniziano a parlare..è una cosa single threaded quindi in teoria una volta che il client si connette il server può anche smettere di ascoltare x altri..solo che ho 2 domande primo perchè quando avvio il server che si mette in ascolto dopo un pò si blocca e viene fuori che l'applicazione nn risponde anche se ho copiato la procedura standard da altri progetti che nn si bloccano..poi una volta che il client è connesso mi chiedevo come fare x far si che il server sia sempre pronto a ricevere i messaggi che gli arrivano..pensavo a un ciclo infinito che continua a invocare la funzione che guarda se ci sono dati disponibili ma nn mi sembra una bella cosa..cmq è fatto così:
Codice:
private void StartServer(int porta)
        {
            try
            {

                this.eventi.AppendText("Avvio server\n");
               
                ip = IPAddress.Parse("192.168.0.2");
                
                
                listener = new TcpListener(ip, porta);
                listener.Start();
                while (true)
                {
                    client = listener.AcceptTcpClient();
                    this.eventi.AppendText("Client connesso!!\n");
                    chat();
                    break;
                }

private void chat()
        {
            this.stream = client.GetStream();
                int n=0;
                while (true)
                {
                    if (stream.DataAvailable)
                    {
                        recMessage(n);
                        n = 1;
                    }
                }
        }
nn guardate come è scritto formalmente perchè ho fatto varie prove anche stupide x vedere se risolvevo..il bello è che quando clicco per avviarlo nn vengono fuori le scritte degli eventi avvio server ecc mentre alcune volte sono uscite
__________________
HAF 922-RYZEN 5 3600+NOCTUA U12S-ANTEC HCG 520W-MSI B550 GAMING PLUS-2X8GB HYPERX FURY RGB-SAPPHIRE RX580 NITRO+ 4GB- ADATA XPG SX8200 Pro 512GB + -CRUCIAL M4 64GB+SAMSUNG 860EVO 256GB+840EVO 128GB+MAXTOR 320GB-CM MK750 CHERRY RED+CMSTORM SENTINEL 3+RAZER VESPULA-AOC 24G2U & SAMSUNG 223BWCOMPRAVENDITE MERCATINO OK
SUPERALEX è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2009, 18:17   #2
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
Se posti il codice completo posso darti una mano, ad occhio e croce ti dico che sicuramente:
1. manca il catch per il try in StartServer
2. Non ha senso mettere while(true) se all'interno c'è un break eseguito incondizionatamente
3. Se è tutto su un solo thread allora è logico che si blocchi perché non processi gli eventi generati dall'utente, mentre se è su più threads devi controllare di effettuare il lock di tutto quel che è condiviso e può essere sia letto sia scritto altrimenti il tuo codice non è thread safe, devi verificare che non ci siano race conditions o deadlocks.
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2009, 19:56   #3
SUPERALEX
Senior Member
 
L'Avatar di SUPERALEX
 
Iscritto dal: May 2006
Città: Vergiate (VA)
Messaggi: 4315
il catch c'è nn lo messo perchè era inutile la parte incriminata è quella so anche che il while è inutile ma avevo provato senza allora l'ho messo così avevo detto di nn guardare il codice in se x se..cmq è a singolo thread proprio perchè c'è un solo client che si connette e col quale parla il form2 è il client
Codice:
public partial class Form1 : Form
    {
        private TcpListener listener;
        private IPAddress ip;
        NetworkStream stream;
        String nick = null;
        TcpClient client;

        public Form1()
        {
            InitializeComponent();
            

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form form2 = new Form2();
            form2.Show();
            
            

        }

        
        
        private void StartServer(int porta)
        {
            try
            {

                this.eventi.AppendText("Avvio server\n");
                /*ip = Dns.GetHostEntry("LocalHost").AddressList[0];*/
                ip = IPAddress.Parse("192.168.0.2");
                
                
                listener = new TcpListener(ip, porta);
                listener.Start();
                while (true)
                {
                    client = listener.AcceptTcpClient();
                    this.eventi.AppendText("Client connesso!!\n");
                    chat();
                    break;
                }
               
            }
            catch (Exception e)
            {
                MessageBox.Show("errore");
            }

            
        }

        private void chat()
        {
            this.stream = client.GetStream();
                int n=0;
                while (true)
                {
                    if (stream.DataAvailable)
                    {
                        recMessage(n);
                        n = 1;
                    }
                }
        }

        private void reset()
        {
            this.eventi.AppendText("Server fermato\n");
            
        }

        private void stopServer()
        {
            stream.Close();
            client.Close();
            listener.Stop();
           
        }

        private void showInfo()
        {
            MessageBox.Show("Inserire un numero compreso tra 1024 e 65536");
        }

        private void recMessage(int n)
        {
            if (stream.CanRead)
            {
                
                byte[] readBuffer = new byte[1024];
                StringBuilder completeMessage = new StringBuilder();
                int num = 0;

                // Incoming message may be larger than the buffer size.
                do
                {
                    num = stream.Read(readBuffer, 0, readBuffer.Length);
                    if (num == 0) return;
                    completeMessage.AppendFormat("{0}", Encoding.ASCII.GetString(readBuffer, 0, num));
                } while (stream.DataAvailable);
                if (String.Compare(completeMessage.ToString(), "close") == 0) stopServer();
               
                if (n == 0)
                {
                    nick = completeMessage.ToString();
                    lista.AppendText("Il client è " + nick);
                }
                else view.AppendText("" + nick + ":  "+ completeMessage);
            
            }


 
        
        }

        private void sendMessage()
        {
            byte[] writebuffer;
            String mex;
            writebuffer = Encoding.ASCII.GetBytes(testo.Text);
                if (writebuffer.Length == 0) throw new Exception();

                stream.Write(writebuffer, 0, writebuffer.Length);

            view.AppendText("\nServer:  " + testo.Text);
            testo.Clear();
            
        }

        private void l(object sender, MouseEventArgs e)
        {

        }

        private void start_Click(object sender, EventArgs e)
        {

            try
            {
               
                int port;
                port = Int32.Parse(porta.Text);
                if (port < 1024 || port > 65536) throw new Exception();
                this.eventi.AppendText("Porta accettata\n");
                StartServer(port);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Numero di porta errato!!Inserire un numero intero compreso tra 1024 e 65536");
                reset();

            }
        }

        private void clear_Click(object sender, EventArgs e)
        {
            testo.Clear();
        }

        private void finish_Click(object sender, EventArgs e)
        {
            stopServer();
        }

        

           

    }
__________________
HAF 922-RYZEN 5 3600+NOCTUA U12S-ANTEC HCG 520W-MSI B550 GAMING PLUS-2X8GB HYPERX FURY RGB-SAPPHIRE RX580 NITRO+ 4GB- ADATA XPG SX8200 Pro 512GB + -CRUCIAL M4 64GB+SAMSUNG 860EVO 256GB+840EVO 128GB+MAXTOR 320GB-CM MK750 CHERRY RED+CMSTORM SENTINEL 3+RAZER VESPULA-AOC 24G2U & SAMSUNG 223BWCOMPRAVENDITE MERCATINO OK
SUPERALEX è offline   Rispondi citando il messaggio o parte di esso
Old 26-05-2009, 23:21   #4
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
Considerando che mantieni la connessione aperta per tutta la durata della chat e che si tratta di TCP, l'uso che fai dello stream è terribile.
Innanzitutto devi definire se è consentito mandare due messaggi di seguito; in secondo luogo definisci una lunghezza massima del messaggio. Se ciascuno manda un solo messaggio e aspetta la risposta basta fare stream.Read cercando di leggere la lunghezza massima del messaggio e controllare che non ritorni 0. Quando ritorna 0 la connessione è stata chiusa. A quel punto liberi le risorse ed esci. Quando ritorna un valore, è il numero di bytes letti, e te li gestisci come vuoi. Tutto sta comunque in un do/while dove la condizione è che l'ultima lettura non sia 0. Se vuoi lasciare la possibilità di mandare due messaggi di seguito allora la cosa più comoda e semplice è avere due threads (puoi condividere la connessione facilmente). Inoltre ricorda che stream.DataAvailable non ti garantisce affatto che tutti i dati inviati dal client siano già stati ricevuti, quindi per come stanno le cose su una rete reale potresti facilmente troncare la ricezione prematuramente.
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2009, 11:59   #5
SUPERALEX
Senior Member
 
L'Avatar di SUPERALEX
 
Iscritto dal: May 2006
Città: Vergiate (VA)
Messaggi: 4315
uno può scrivere quanto vuole..ma senza multithread..quindi nn so come fare perchè sia sempre pronto a ricevere e contemporaneamente a mandare
__________________
HAF 922-RYZEN 5 3600+NOCTUA U12S-ANTEC HCG 520W-MSI B550 GAMING PLUS-2X8GB HYPERX FURY RGB-SAPPHIRE RX580 NITRO+ 4GB- ADATA XPG SX8200 Pro 512GB + -CRUCIAL M4 64GB+SAMSUNG 860EVO 256GB+840EVO 128GB+MAXTOR 320GB-CM MK750 CHERRY RED+CMSTORM SENTINEL 3+RAZER VESPULA-AOC 24G2U & SAMSUNG 223BWCOMPRAVENDITE MERCATINO OK
SUPERALEX è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2009, 12:29   #6
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
Senza multithreading lo scenario che hai in mente non esiste, non in maniera decente.
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2009, 15:30   #7
SUPERALEX
Senior Member
 
L'Avatar di SUPERALEX
 
Iscritto dal: May 2006
Città: Vergiate (VA)
Messaggi: 4315
ok allora mettiamo che ognuno manda un messaggio alla volta..cmq deve stare sempre in ascolto perchè nn può sapere quando l'altro scriverà..e deve anche capire quando il messaggio è finito..
__________________
HAF 922-RYZEN 5 3600+NOCTUA U12S-ANTEC HCG 520W-MSI B550 GAMING PLUS-2X8GB HYPERX FURY RGB-SAPPHIRE RX580 NITRO+ 4GB- ADATA XPG SX8200 Pro 512GB + -CRUCIAL M4 64GB+SAMSUNG 860EVO 256GB+840EVO 128GB+MAXTOR 320GB-CM MK750 CHERRY RED+CMSTORM SENTINEL 3+RAZER VESPULA-AOC 24G2U & SAMSUNG 223BWCOMPRAVENDITE MERCATINO OK
SUPERALEX è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2009, 15:37   #8
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
Un messaggio alla volta, visto che si tratta di testo e non di dati, lo puoi gestire stabilendo una lunghezza massima del messaggio (arbitraria) e poi usando codice di questo genere:
Codice:
var buf = new byte[LUNGHEZZA_MASSIMA_MESSAGGIO];
var letti = stream.Read(buf, 0, LUNGHEZZA_MASSIMA_MESSAGGIO);
if(letti != 0) //letti contiene la lunghezza del messaggio
{
    //uso UTF8 arbitrariamente, puoi usare ASCII o Unicode o quel che preferisci
    string messaggio = Encoding.UTF8.GetString(buf.Take(letti).ToArray()); //usiamo LINQ to Objects per evitare gli \0 finali nella string. si può fare anche diversamente ma così è più conciso.
    //fai quel che vuoi con messaggio
}
else
{
    //gestisci il caso in cui la connessione è stata chiusa
}
E dopo aver ricevuto il messaggio dovresti dar la possibilità all'utente di mandare il suo. Resta il fatto che senza multithreading, mentre il programma è in attesa di un messaggio se l'utente prova ad interagirci il sistema dirà all'utente che il programma non risponde etc etc.
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2009, 19:17   #9
SUPERALEX
Senior Member
 
L'Avatar di SUPERALEX
 
Iscritto dal: May 2006
Città: Vergiate (VA)
Messaggi: 4315
ok ma questo deve essere in un ciclo infinito a ripetizione cioè continua a cercare di leggere finchè nn arrivano..ma se dopo che li ha ricevuti (e cmq continua a leggere il nulla)uno schiaccia il tasto x inviare li invia cmq no
__________________
HAF 922-RYZEN 5 3600+NOCTUA U12S-ANTEC HCG 520W-MSI B550 GAMING PLUS-2X8GB HYPERX FURY RGB-SAPPHIRE RX580 NITRO+ 4GB- ADATA XPG SX8200 Pro 512GB + -CRUCIAL M4 64GB+SAMSUNG 860EVO 256GB+840EVO 128GB+MAXTOR 320GB-CM MK750 CHERRY RED+CMSTORM SENTINEL 3+RAZER VESPULA-AOC 24G2U & SAMSUNG 223BWCOMPRAVENDITE MERCATINO OK
SUPERALEX è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2009, 20:20   #10
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
Il tuo ultimo post ha poco senso, cerca di esplicitare di più la sequenza temporale delle azioni e i soggetti. Ad ogni modo il codice di cui sopra è solo la parte di ricezione di un messaggio. Durante la sua esecuzione in un contesto a thread unico non è possibile interagire ulteriormente con il programma, ed in seguito all'esecuzione puoi integrare la parte che dovrebbe gestire l'invio e racchiudere tutto in un ciclo while con condizione che verifichi che la connessione è aperta. In questo modo hai ricezione-invio-ricezione-invio...
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2009, 21:44   #11
SUPERALEX
Senior Member
 
L'Avatar di SUPERALEX
 
Iscritto dal: May 2006
Città: Vergiate (VA)
Messaggi: 4315
si ma l'invio dovrebbe avvenire ogni qualvolta uno schiaccia il pulsante invia nn quando lo decide il codice..è la ricezione che deve stare sempre all'erta
__________________
HAF 922-RYZEN 5 3600+NOCTUA U12S-ANTEC HCG 520W-MSI B550 GAMING PLUS-2X8GB HYPERX FURY RGB-SAPPHIRE RX580 NITRO+ 4GB- ADATA XPG SX8200 Pro 512GB + -CRUCIAL M4 64GB+SAMSUNG 860EVO 256GB+840EVO 128GB+MAXTOR 320GB-CM MK750 CHERRY RED+CMSTORM SENTINEL 3+RAZER VESPULA-AOC 24G2U & SAMSUNG 223BWCOMPRAVENDITE MERCATINO OK
SUPERALEX è offline   Rispondi citando il messaggio o parte di esso
Old 27-05-2009, 23:23   #12
!k-0t1c!
Member
 
Iscritto dal: Jul 2008
Messaggi: 237
Infatti, nessuno ti vieta di fare così. E la ricezione in un contesto a thread singolo non può "stare sempre all'erta" in maniera affidabile. Ad ogni modo ti consiglio di studiare qualcosa a livello di protocolli e di guardare qualche implementazione reale perché sembri avere le idee abbastanza confuse sulla materia e questa non mi pare la sede adatta per chiarirle.
!k-0t1c! è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 11:24   #13
SUPERALEX
Senior Member
 
L'Avatar di SUPERALEX
 
Iscritto dal: May 2006
Città: Vergiate (VA)
Messaggi: 4315
ho provato con i thread che ne dici?l'unica cosa è che se avvio il form 1 nn mi visualizza il client nn so perchè mentre prima se lo facevo senza dargli un thread apposito appariva
Codice:
namespace CHAT_FORM
{
    public partial class Form1 : Form
    {
        private TcpListener listener;
        private IPAddress ip;
        NetworkStream stream;
        String nick = null;
        TcpClient client;
        Thread recThread;
        Thread sendThread;
        Thread clientThread;
        
        public Form1()
        {
            InitializeComponent();
            

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Form form2 = new Form2();
            clientThread = new Thread(new ThreadStart(form2.Show));
            clientThread.Start();
            
            
            
            

        }

        
        
        private void StartServer(int porta)
        {
            try
            {

                this.eventi.AppendText("Avvio server\n");
                
                ip = IPAddress.Parse("127.0.0.1");
                
                
                listener = new TcpListener(ip, porta);
                listener.Start();
                while (true)
                {
                    client = listener.AcceptTcpClient();
                    this.eventi.AppendText("Client connesso!!\n");
                    
                    recThread = new Thread(new ThreadStart(chat));
                    recThread.Start(client);
                    break;
                }
                
            }
            catch (Exception e)
            {
                MessageBox.Show("errore");
            }

            
        }

        private void chat()
        {
            
            this.stream = client.GetStream();
                int n=0;
                while (true)
                {
                    
                        recMessage(n,stream);
                        n = 1;
                    
                }
        }

        private void reset()
        {
            this.eventi.AppendText("Server fermato\n");
            
        }

        private void stopServer()
        {
            stream.Close();
            client.Close();
            listener.Stop();
           
        }

        private void showInfo()
        {
            MessageBox.Show("Inserire un numero compreso tra 1024 e 65536");
        }

        private void recMessage(int n,NetworkStream stream)
        {
            if (stream.CanRead)
            {
                
                byte[] readBuffer = new byte[1024];
                StringBuilder completeMessage = new StringBuilder();
                int num = 0;

                // Incoming message may be larger than the buffer size.
                do
                {
                    num = stream.Read(readBuffer, 0, readBuffer.Length);
                    
                    completeMessage.AppendFormat("{0}", Encoding.ASCII.GetString(readBuffer, 0, num));
                } while (num>0);
                if (String.Compare(completeMessage.ToString(), "close") == 0) stopServer();
               
                if (n == 0)
                {
                    nick = completeMessage.ToString();
                    lista.AppendText("Il client è " + nick);
                }
                else view.AppendText("" + nick + ":  "+ completeMessage);
            
            }


 
        
        }

        private void sendMessage()
        {
            byte[] writebuffer;
            String mex;
            writebuffer = Encoding.ASCII.GetBytes(testo.Text);
                if (writebuffer.Length == 0) throw new Exception();

                stream.Write(writebuffer, 0, writebuffer.Length);

            view.AppendText("\nServer:  " + testo.Text);
            testo.Clear();
            
        }

        private void l(object sender, MouseEventArgs e)
        {

        }

        private void start_Click(object sender, EventArgs e)
        {

            try
            {
               
                int port;
                port = Int32.Parse(porta.Text);
                if (port < 1024 || port > 65536) throw new Exception();
                this.eventi.AppendText("Porta accettata\n");
                StartServer(port);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Numero di porta errato!!Inserire un numero intero compreso tra 1024 e 65536");
                reset();

            }
        }

        private void clear_Click(object sender, EventArgs e)
        {
            testo.Clear();
        }

        private void finish_Click(object sender, EventArgs e)
        {
            stopServer();
        }

        private void send_Click(object sender, EventArgs e)
        {
            sendThread = new Thread(new ThreadStart(sendMessage));
            sendThread.Start();
            do
            {

                if (!sendThread.IsAlive) sendThread.Abort();
            } while (sendThread.IsAlive);
        }

        

           

    }
}
__________________
HAF 922-RYZEN 5 3600+NOCTUA U12S-ANTEC HCG 520W-MSI B550 GAMING PLUS-2X8GB HYPERX FURY RGB-SAPPHIRE RX580 NITRO+ 4GB- ADATA XPG SX8200 Pro 512GB + -CRUCIAL M4 64GB+SAMSUNG 860EVO 256GB+840EVO 128GB+MAXTOR 320GB-CM MK750 CHERRY RED+CMSTORM SENTINEL 3+RAZER VESPULA-AOC 24G2U & SAMSUNG 223BWCOMPRAVENDITE MERCATINO OK
SUPERALEX è offline   Rispondi citando il messaggio o parte di esso
Old 30-05-2009, 13:59   #14
gugoXX
Senior Member
 
L'Avatar di gugoXX
 
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
Per un problema del genere ti consiglierei di usare dei datagrammi UDP
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto.
E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test.
gugoXX è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Anthropic ha un'AI che trova falle in Wi...
I 10 migliori sconti Amazon del weekend:...
Con un coupon scendono ancora: le super ...
Minimo storico per Samsung Galaxy S26 Ul...
Si è conclusa la missione lunare ...
EK Waterblock si arrende agli aumenti, i...
Geekbench si aggiorna: tutti i test con ...
Per la prima volta un computer quantisti...
Telecamere Reolink 4K su Amazon: Wi-Fi 6...
Anthropic vuole farsi i chip da sola? Co...
Il fondatore di Framework: il personal c...
JBL Live Flex 3 a 129€ su Amazon: ANC ad...
Come un uomo ha costruito un'azienda da ...
Multe fino a 400 euro anche se hai pagat...
Tapo lancia una valanga di offerte su Am...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 10:12.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v