C#で容量の大きめなファイルをTcpclientで送信すると、回線の良いPCだと正常に動作するのですが、回線の悪いPCだとファイルが破損したり、送信が途中で止まってしまいます。タスクマネージャーでネットワーク使用率を見ると20%ぐらい使っていました。
送信部分のコードです
C#
1 System.Net.Sockets.NetworkStream ns = tcp.GetStream(); 2 ns.Write(sendBytes, 0, sendBytes.Length);
分割されたデータの受信方法はこちらを参考にしてできたのですが、分割して送信する方法がわからないです。
SendBufferSizeを指定してみたのですが、変化がなかったです。
NetworkStream のWriteメソッドにオフセットとサイズを指定できるみたいなので、
試しにこんな感じで実行してみたら、回線の悪いPCでも問題なく動作しました。
C#
1 System.Net.Sockets.NetworkStream ns = tcp.GetStream(); 2 ns.Write(sendBytes, 0, 1200);
しかし、これだと当然ながら、データの一部しか送ることができません。
ここをループ処理で上手く回せばいけるかなと思い、下記のようなコードを書いてみましたが最初の一回だけ送信されたあと、特にerrorも出ずに送信処理がストップしてしまいました。(elseに到達できていません)
C#
1 2 System.Net.Sockets.NetworkStream ns = tcp.GetStream(); 3 int size = sendBytes.Length; 4 int seze2 = 0; 5 while (true) 6 { 7 8 if (size > 1200) 9 { 10 ns.Write(sendBytes, sezi2, 1200); 11 seze2 += 1200; 12 size -= 1200; 13 } 14 else 15 { 16 ns.Write(sendBytes, sezi2, sendBytes.Length); 17 break; 18 } 19 20 21 22 }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/19 21:25
退会済みユーザー
2016/04/19 23:05
2016/04/20 00:30
2016/04/20 08:39