TcpListener
とTcpClient
が通信するときに、いくつかの機能がどのように共有されているかを正確に理解できません。TCP接続の両端で実行する必要があるアクション
(今の同期を無視するために)のは、次のコードが実行されるとしましょう:
サーバー:
Dim server As New TcpListener(localAddr, port)
server.Start()
Dim client As TcpClient = server.AcceptTcpClient()
はクライアント:
Dim client As New TcpClient
client.Connect(hostAddr, port)
、接続が正常に確立されます。現在、サーバ側に1つ、クライアント側に1つのインスタンスが2つあります。ただし、同じネットワークストリームを共有するのはTcpClient.GetStream()
です。
ちょっと混乱しています - server.AcceptTcpClient()
を呼び出すと、クライアントはサーバーとそのすべてのプロパティをサーバーに渡しますか?
これ以降のTcpClient
インスタンスの変更はどうなりますか?接続がシャットダウンしたとき、私は両側にこれを呼び出す:
client.GetStream.Close()
client.Close()
しかし、私はそれは、クライアントがすでに閉じていることを私に伝えますので、このコードは、最新のを実行し、クライアントにTcpClient.GetStream.Close()
で例外を取得(これは場合に発生します上のコードは両側で完全には同期していません)。
.SendBufferSize
と.ReceiveBufferSize
のプロパティについてはどうなりますか?接続の両側にこれを設定する必要がありますか?
通信中にTcpClient/Listener
のクラスがどのくらい正確に動作しているのかについての説明で、誰かが私の混乱を解消できることを願っています - これまでのところ、正確に何が起こっているか説明するドキュメントは見つかりませんでした。
「NetworkStream」と同じではありません。ストリームのそれぞれは、 'TcpClient'の基になる' Socket'にバインドされています。 - 'Send/ReceiveBufferSize'プロパティは単にあなたが送信または受信する方法を示しています。それらを変更することはそれほど役に立ちませんし、クライアント/サーバー上で異なることは実際には何にも影響しません。 –
@VisualVincent送受信属性は 'server.AcceptTcpClient()'で送信されますか?私はあなたが意味することをあまり意味していないことをよく理解していません...確かに大きなファイルの交換を計画していたら、それらを増やしますか? – Shuri2060
何も送信されません。唯一の同期プロパティは 'Connected'プロパティです。 '' BufferSize'プロパティは '' NetworkStream.Read/Write'を呼び出すたびにどれくらい送受信を期待するかの指標に過ぎません。引用[**ドキュメント**](https://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.sendbuffersize(v = vs.110).aspx):_ "SendBufferSizeプロパティは、NetworkStream.Writeメソッドへの各呼び出しで送信する予定のバイト数を取得または設定します。 "_ –