4

私はc#クライアントとサーバーアプリケーションに不慣れで、ファイルアップロードクライアントとサーバーアプリケーションに取り組んでいます。

クライアントアプリケーションからサーバーにファイル名とファイルデータを正常にアップロードできます。しかし、ファイルアップロードクライアントが自分の名前を入力し、送信ボタンをクリックしたときにファイル名とファイルデータと一緒に情報を送信できるようにする新しいテキストボックスを実装しようとすると。

クライアントアプリケーション。

 /* file name and file length */
            byte[] fName = Encoding.UTF8.GetBytes(fileName);
            byte[] fNameLen = BitConverter.GetBytes(fileName.Length); // length of file name
            clientData = new byte[4 + fileName.Length];                
            System.Diagnostics.Debug.WriteLine("fName " + fName.Length);
            System.Diagnostics.Debug.WriteLine("fNamelen " + fNameLen.Length);
            fNameLen.CopyTo(clientData, 0);
            fName.CopyTo(clientData, 4);

            /* author name and author name length */
            byte[] aName = Encoding.UTF8.GetBytes(textBox2.Text);
            byte[] aNameLen = BitConverter.GetBytes(textBox2.Text.Length);
            System.Diagnostics.Debug.WriteLine("aName " + aName.Length);
            System.Diagnostics.Debug.WriteLine("aNamelen " + aNameLen.Length);
            authorData = new byte[9 + textBox2.Text.Length];
            aNameLen.CopyTo(authorData, 5);
            aName.CopyTo(authorData, 9);

サーバーアプリケーション

/* retriving of file name */
               System.Diagnostics.Debug.WriteLine("Error 1");
               fNameLen = BitConverter.ToInt32(state.buffer, 0);
               System.Diagnostics.Debug.WriteLine("Error 2 fNameLen " + fNameLen);
               string Filename = Encoding.UTF8.GetString(state.buffer, 4, fNameLen);
               System.Diagnostics.Debug.WriteLine("Error 3");
               System.Diagnostics.Debug.WriteLine("filename length " + fNameLen);
               receivedPath = @"C:\testfiles\" + Filename;
               System.Diagnostics.Debug.WriteLine("bytesREad1 " + bytesRead);
               System.Diagnostics.Debug.WriteLine(receivedPath);

               /* retriving of author name */
               aNameLen = BitConverter.ToInt32(state.buffer, 5);
               System.Diagnostics.Debug.WriteLine("Error 4");
               System.Diagnostics.Debug.WriteLine("error  5");
               System.Diagnostics.Debug.WriteLine("author name length " + aNameLen);
               string authorName = ASCIIEncoding.ASCII.GetString(state.buffer, 9, aNameLen);
               System.Diagnostics.Debug.WriteLine("Error 6");
               System.Diagnostics.Debug.WriteLine("author name " + authorName);
               System.Diagnostics.Debug.WriteLine("author name length " + aNameLen);

出力ウィンドウと太字で示されたエラー:

  • エラー1
  • エラー2fNameLen12
  • エラー3
  • ファイル名の長さ12
  • bytesREad1 82
  • C:\ testfiles \ Test1122.txt
  • エラー4
  • エラー5
  • 著者名の長さ829715301
  • タイプ'System.ArgumentOutOfRangeException'の最初のチャンスの例外がmscorlib.dllで発生しました

前もって感謝します。

4

1 に答える 1

1

BinaryReader / BinaryWriter を使用すると、作業が簡単になります。

例:

クライアント

fileContentsバイト配列です。

var stream = new MemoryStream();
var writer = new BinaryWriter(stream);
writer.Write(fileName);
writer.Write(authorName);
writer.Write(fileContents.Length);
writer.Write(fileContents);

var data = stream.ToArray();  // send this data array to server
writer.Dispose();
stream.Dispose();

サーバ

var stream = new MemoryStream(state.buffer);
var reader = new BinaryReader(stream);

var fileName = reader.ReadString();
var author = reader.ReadString();
var fileContents = reader.ReadBytes(reader.ReadInt32());
reader.Dispose();
stream.Dispose();
于 2012-08-09T10:32:41.327 に答える