2012-03-04 10 views
19

私は、TcpClientがソケットクラスのラッパーであることを理解しています.TcpClientを使用している場合、基盤となるソケットにアクセスできますが、ラッパーは正確に何をしますか?Socketを介してTcpClientを直接使用する利点は何ですか?

TCPClientを使用する場合、ソケットで行うようにReceive()を呼び出す必要がありますか、またはラッパーによってすべてのデータが確実に表示されますか?

最後に、私は(サーバー上の元の接続を受け入れるようにTcpListenerを使用した後に)ソケットをラップするために、サーバーとクライアントの両方でれるtcpClientを使用することができます

答えて

17

ラッパーが正確に何をするのでしょうか?

例を挙げて説明します。 C#File.ReadAllLinesにメソッドがあります。ファイル内のすべての行が読み込まれます。今度は、FileStreamクラスまたはファイルを読み込む他のクラスを使用して同じ結果を得ることもできます。ただし、ラッパー(File.ReadAllLines)を使用すると、少ないコード行で同じ結果を達成できます。ラッパーは常にれるtcpClientを使用する場合は、低レベルの詳細

を抽象化し、生産性を向上させる、私はソケットに を行うか、ラッパーは、すべて私のデータが表示されたことを確認んように私は)(受信呼び出しておく必要がありますか?

TCPClientSocketようReceive方法を持っていませんが、考え方は同じです。あなたは

私は、サーバーとクライアントの両方でれるtcpClientを使用することはでき ソケットをラップするためにあなたはそれが自動的に表示されませんデータを読み取るためにGetStreamのようなメソッドを使用する必要があります

はいクライアント側とサーバー側の両方で安全に使用できます。

+0

ああ、わかりました。だから私はソケット受信時のメッセージが_myTcpClient.GetStream()を使って実行できるようになるまで、_BeginReceive()、EndReceive()、バイトストア、そしてBeginReceive() TcpClientで? BeginRead()は、指定されたバイト数が実際に受信されるまで、EndRead()コールバックを呼び出しませんか? (すべての予想されるバイトが受信されるまで、BeginRead()/ BeginReceive()を常に呼び出す必要はありません) – Dermot

+1

'BeginRead'と' EndRead'の代わりに 'NetworkStream'クラスの' Read'メソッドと 'Write'メソッドを使用したいあなたが明示的に 'BeginRead'と' EndRead'を呼び出す必要がないので、ラッパーはあなたのためにそれを行います。このようなインターネット上のいくつかのサンプルを参照してくださいhttp://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.getstream.aspx –

+0

私のためにそれを明確にしてくれてありがとう。 – Dermot

関連する問題