我是一名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
- 错误 2 fNameLen 12
- 错误 3
- 文件名长度为12
- bytesREad1 82
- C:\testfiles\Test1122.txt
- 错误 4
- 错误 5
- 作者名称长度为829715301
- 首次出现异常类型'System.ArgumentOutOfRangeException'在mscorlib.dll中发生。
谢谢您的帮助。
aNameLen = BitConverter.ToInt32(state.buffer, 5);
。这里的数字 5 不应该存在。正确的数字应该是 4 + 文件名长度。 - Marcelo De ZenaNameLen = BitConverter.ToInt32(state.buffer, 5);
更改为aNameLen = BitConverter.ToInt32(state.buffer, 4 + Filename.Length);
和aNameLen = BitConverter.ToInt32(state.buffer, 4 + fNameLen);
,但两者都返回 null。 - Daryl