mscorlib.dll 中发生了“System.ArgumentOutOfRangeException”类型的第一次机会异常

2024-01-03

我是 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);

输出窗口和错误以粗体显示:

  • Error 1
  • 错误 2 fNameLen 12
  • Error 3
  • 文件名长度12
  • 字节读取1 82
  • C:\testfiles\Test1122.txt
  • Error 4
  • error 5
  • 作者姓名长度829715301
  • “System.ArgumentOutOfRangeException”类型的第一次机会异常 发生在 mscorlib.dll 中

先感谢您。


如果您使用 BinaryReader / BinaryWriter ,事情会更容易。

例子:

Client

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();

Server

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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mscorlib.dll 中发生了“System.ArgumentOutOfRangeException”类型的第一次机会异常 的相关文章

  • 当从后台工作程序发生事件时,XlCall.Excel(XlCall.xlcCalculateNow) 抛出 XlCallException

    我有一个 ExcelFunction 来排队一些计算 ExcelFunction public static void QueueCalcs takes ranges var calcRequests builds list of calc
  • 使用 Xamarin.Forms 和 Zxing 生成 QR 码

    我在网上看到了很多关于这个的内容 旧帖子 但似乎没有什么对我有用 我正在尝试从字符串中生成二维码并将其显示在应用程序中 这就是我一开始的情况 qrCode new ZXingBarcodeImageView BarcodeFormat Ba
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • 如何查明 .exe 是否正在 C++ 中运行?

    给定进程名称 例如 程序 exe C 标准库没有这样的支持 您需要一个操作系统 API 来执行此操作 如果这是 Windows 那么您将使用 CreateToolhelp32Snapshot 然后使用 Process32First 和 Pr
  • 类中是否可以有虚拟类声明?

    我正在为个人项目中框架的各个组件设置一个接口 我突然想到了一些我认为可能对接口有用的东西 我的问题是这是否可能 class a public virtual class test 0 class b public a public clas
  • 从时间列表中查找最接近的时间

    所以 这是场景 我有一个带有创建时间的文件 我想从该文件的创建时间最接近或相等的时间列表中选择一个时间 完成此操作的最佳方法是什么 var closestTime listOfTimes OrderBy t gt Math Abs t fi
  • 关闭整数的最右边设置位

    我只需要关闭最右边的设置位即可 我的方法是找到最右边位的位置 然后离开该位 我编写这段代码是为了这样做 int POS int n int p 0 while n if n 2 0 p else break n n 2 return p i
  • 无法获取本地或参数的值,因为它在此指令指针处不可用,可能是因为它已被优化掉

    Visual Studio 2010 会删除 没有其他词 不安全块中函数参数之一中的数据 什么可能导致此错误 调试器显示以下消息 Cannot obtain value of local or argument as it is not a
  • 如何增加ofstream的缓冲区大小

    我想增加 C 程序的缓冲区大小 以便它不会过于频繁地写入 默认缓冲区是 8192 字节 我尝试使用 pubsetbuf 将其增加到 200K 原始代码 ofstream fq fastq1 cstr ios out fastq1 is a
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • 从点云检测平面集

    我有一组点云 我想测试3D房间中是否有角落 所以我想讨论一下我的方法 以及在速度方面是否有更好的方法 因为我想在手机上测试它 我将尝试使用霍夫变换来检测线 然后我将尝试查看是否有三条线相交 并且它们也形成了两个相交的平面 如果点云数据来自深
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 选择 asp.net CheckBoxList 中的所有项目

    ASP NET 和 C 我想要一个带有 全选 项目的复选框列表 当这个特定项目是 已选择 所有其他都将被选择 也 当选择被删除时 这个项目 也将来自所有人 其他物品 选中 取消选中 任何其他项目只会有一个 对特定项目的影响 无论选择状态如何
  • 测验;这个编译了吗?如果是的话它会返回什么(我知道答案)

    我最近发现这个错字 if name find string npos 显然开发者的意思是输入 if name find string npos 但令我惊讶的是发现错误甚至编译 Wall Werror 没有尝试过 pedantic 那么 咖啡
  • 用数组或向量实现多维数组

    我想使用单个数组或向量实现多维数组 可以像通常的多维数组一样访问它 例如 a 1 2 3 我陷入困境的是如何实施 操作员 如果数组的维数为 1 则 a 1 应该返回位于索引 1 处的元素 但是如果维数大于一怎么办 对于嵌套向量 例如 3 维
  • 如何调用与现有方法同名的扩展方法? [复制]

    这个问题在这里已经有答案了 我有这样的代码 public class TestA public string ColA get set public string ColB get set public string ColC get se
  • 时间:2019-03-17 标签:c#TimerStopConfusion

    我想通过单击按钮时更改文本颜色来将文本框文本设置为 闪烁 我可以让文本按照我想要的方式闪烁 但我希望它在闪烁几次后停止 我不知道如何在计时器触发几次后让它停止 这是我的代码 public Form1 InitializeComponent
  • MSVC编译器下使用最大成员初始化联合

    我正在尝试初始化一个LARGE INTEGER在 C 库中为 0 确切地说是 C 03 以前 初始化是 static LARGE INTEGER freq 0 在 MinGW 下它产生了一个警告 缺少成员 LARGE INTEGER Hig
  • Unity,c++ 本机插件字节数组不匹配

    在我的 C 本机插件中 我有一个调用 vector
  • 如何知道 HTTP 请求标头值是否存在

    我确信这很简单 但是却让我感到厌烦 我在 Web 应用程序中使用了一个组件 它在 Web 请求期间通过添加标头 XYZComponent true 来标识自身 我遇到的问题是 如何在视图中检查此组件 以下内容不起作用 if Request

随机推荐