トップページ > プログラム > 2014年10月26日 > RQyk7KlL

書き込み順位&時間帯一覧

26 位/216 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000000000012003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
ネットワークプログラミング相談室 Port29

書き込みレス一覧

ネットワークプログラミング相談室 Port29
935 :デフォルトの名無しさん[]:2014/10/26(日) 20:22:36.66 ID:RQyk7KlL
C#でグーグルメールの受信プログラムを書いています。
下記のプログラムを実行すると、データを末尾まで取得していないにもかかわらず、ループから抜ける事があります。
readByteCount == 0 のみをループの脱出条件にすると、Readで止まって(恐らくタイムアウト待ちになって)しまいます。
データを末尾まで確実に受取るにはどうすればよいのでしょう?

TcpClient client; // 接続処理、略
SslStream stream; // clientとの関連付け処理、略

byte[] command = Encoding.UTF8.GetBytes( ”__TAG__ FECTH ...略” );
stream.Write( command );

byte[] byteBuffer = new byte[ 256 ];
int offset = 0;

while ( true )
{
int readByteCount = stream.Read( byteBuffer, offset, byteBuffer.Length - offset );
offset += readByteCount;

if ( client.Available == 0 ||
readByteCount == 0 )
{
break;
}

if ( offset >= byteBuffer.Length )
{ // バッファの拡張処理 }

}
ネットワークプログラミング相談室 Port29
937 :デフォルトの名無しさん[]:2014/10/26(日) 21:20:17.41 ID:RQyk7KlL
そこを何とかお願いします orz 。
ネットワークプログラミング相談室 Port29
939 :デフォルトの名無しさん[sage]:2014/10/26(日) 21:50:44.31 ID:RQyk7KlL
>>938
レス有難うございます。

取得している内容はIMAPコマンドのレスポンスです。
データをパースすれば末尾かどうか判断がつきますが、パースは受信後の処理と考えていました。
読み込みながらパース、ってプログラムが複雑になります。
サーバー側の送信が終わったかどうかを検知できればいいと思っていたのですが、不可能なのでしょうか。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。