私はソケットプログラミングC#(.NET)で私の手をしようとしています。私はcodeprojectからいくつかの例を参照しましたが、私のファイル転送は常に不完全なデータを送信します。ソケットファイル転送Cで不完全なファイルを送信
非常に小さいサイズのデータは、1kBのように正常に動作します。しかし、大きなファイルは、不完全な、特に画像が転送されます。
私のクライアントコードは、サーバーにファイルを送信します。 clientDataは、ファイルのバイナリを格納します。
ここでは、ファイルを受信するサーバーのコードです。
sock.Listen(100);
curMsg = "Running and waiting to receive file.";
Socket clientSock = sock.Accept();
byte[] clientData = new byte[1024 * 5000];
int receivedBytesLen = clientSock.Receive(clientData);
curMsg = "Receiving data...";
int fileNameLen = BitConverter.ToInt32(clientData, 0);
string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);
BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath +"/"+ fileName, FileMode.Append)); ;
bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);
curMsg = "Saving file...";
bWrite.Close();
clientSock.Close();
面白いのは、クライアントで「送信」でブレークポイントを設定すると、ファイルが正常に転送されることです。私は受信バイトがクライアントで転送されたバイトよりも小さいときに、私はブレークポイントを使用するとき両端のバイト数と転送バイトが一致しているのを見ている。
私は間違っていますか?
チャンクでデータを送信するために作成したコードをアップロードできますか? – AndroidLearner
使用しているClose()のオーバーロードは、送受信が「終了」するまで待機せず、タイムアウトのあるオーバーロードを使用する必要があるため、送信ストリームを「パージ」する時間があります。 –