2017-09-16 11 views
-3

私はC#を使ってTCPクライアント/サーバアプリケーションを作って遊んでいます。ネットワーク経由でメッセージを送信する際に、これらの2つのスタイルの間で使う​​方が良いと混乱します。TCPでメッセージを送信する方法はどれですか?

私が遭遇した最初のスタイルは、メッセージをバイト配列に変換し、NetworkStream.Write(*)メソッドを使用してTcpClientのインスタンスのNetworkStreamに書き込むことです。で、より効率的であるこれら二つの流れに

私が遭遇したもう一つのスタイルは、StreamWriterのにれるtcpClientインスタンスのNetworkStreamを渡し、その後、メッセージを書くために StreamWriter.Write()メソッドを使用している
void StyleOne(string msg) 
{ 
      TcpClient client = new TcpClient(); 
      client.Connect(ip, port); 
      NetworkStream nwStream = client.GetStream(); 
      byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(msg); 

      nwStream.Write(bytesToSend, 0, bytesToSend.Length); 
      nwStream.Flush(); 
      client.Close(); 
} 

void StyleTwo(string msg) 
{ 
      TcpClient client = New TcpClient(ip, port); 
      StreamWriter writer = New StreamWriter(client.GetStream()); 
      writer.Write(msg); 
      writer.Flush(); 
      client.Close(); 
} 

ネットワークを介して送信されるメッセージのサイズが最大でも1メガバイトの場合は、メモリ、速度、およびパフォーマンス

+0

エンコードを知っているので、最初の方法が優れています。 Asciiエンコーディングは、印刷できない文字を削除します。 – jdweng

+0

[どちらが速いのですか?](https://ericlippert.com/2012/12/17/performance-rant/) –

答えて

0

StreamWriterインスタンスは常に(そのコンストラクタで指定できる)同じエンコーディングを使用し、さまざまな種類のデータをストリームに書き込むための便利なメソッドをいくつか備えています。

最初の例では、ちょうどStreamWriterが何をしているのかを多かれ少なかれ分かります。エンコードを適用して、基礎となるストリームにデータを書き込みます。

複数のビットのデータを(同じエンコードで)送信する必要がある場合は、StreamWriterを使用すると、よりクリーンなコードになります。ちょうど単一のためにstring私はあなたが取るアプローチが本当に重要ではないと思います。

+0

基本的に、彼らは効率と効率に関して同じですか? 'StreamWriter writer = new StreamWriter(client.GetStream()、ASCIIEncoding.ASCII)' これは最初のコードスニペットとまったく同じですか?メモリ、スピードなどの違いはありませんか? – ReiSchneider

+0

@ReiSchneiderいつも違いがあります。エンコーディングを適用するには、少しオーバーヘッドがあります。多くの人がパフォーマンスを最適化する傾向があるので、コードが大混乱になっていることを認識していないので、L.B _が助けようとしていると思います。それがここに当てはまらないならば、個人的にそれをとらないでください:) –

関連する問題