2012-03-04 7 views
19

Comprendo che un TcpClient è un wrapper attorno alla classe socket e posso accedere al socket sottostante se si utilizza TcpClient, ma cosa fa esattamente il wrapper?Quali sono i vantaggi dell'utilizzo diretto di TcpClient su un socket?

Quando si utilizza TCPClient, devo continuare a chiamare Receive() come faccio con un socket o il wrapper garantisce che vengano visualizzati tutti i miei dati?

Infine, posso usare il TcpClient sia sul server e il client per avvolgere la presa (dopo aver usato TcpListener per accettare la connessione originale sul server)

risposta

17

Che cosa fa esattamente il wrapper fare?

Lasciatemi spiegare questo con un esempio. Hai un metodo in C# File.ReadAllLines. Legge tutte le righe nel file per te. Ora puoi anche ottenere gli stessi risultati tramite la classe FileStream o qualsiasi altra classe che legge il file .. BUT .. wrapper cioè File.ReadAllLines, ti consente di ottenere lo stesso con meno linee di codice. Wrapper aumentano sempre la produttività astraendo i dettagli di basso livello

Quando si utilizza il TCPClient cosa ho bisogno per continuare ad invocare ricezione() come faccio io con una presa di corrente o se l'involucro appare assicurarsi che tutti i miei dati?

TCPClient non hanno un metodo Receive come Socket ma l'idea è la stessa. Si dovrà utilizzare metodi come GetStream di leggere i dati non comparirà automagicamente per voi

Posso usare il TcpClient sia sul server e il client per avvolgere la presa

Sì , puoi tranquillamente usarlo sia lato client che lato server

+0

Ah capisco. Quindi ho ragione nel dire che l'equivalente di eseguire _BeginReceive(), seguito da EndReceive(), memorizzare i byte e richiamare BeginReceive() nuovamente fino a quando il messaggio ricevuto_ su un socket, può essere eseguito usando _myTcpClient.GetStream(). BeginRead() _ su un TcpClient? BeginRead() non chiamerà il callback EndRead() finché il numero specificato di byte ricevuti non sia stato effettivamente ricevuto? (eliminando la necessità di chiamare costantemente BeginRead()/BeginReceive() fino a quando tutti i byte attesi sono stati ricevuti) – Dermot

+1

Preferirei usare i metodi 'Read' e' Write' della classe 'NetworkStream' invece di' BeginRead' e 'EndRead' perché non dovrai chiamare esplicitamente 'BeginRead' e' EndRead' il wrapper lo farebbe per te. Guarda alcuni esempi su internet come questo http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.getstream.aspx –

+0

Grazie per aver chiarito che per me. – Dermot

Problemi correlati