c# - 如何为在套接字上发送的文件创建长度前缀?

标签 c# java sockets tcp

我想通过 TCP 套接字将 xml 文件从 C# 应用程序发送到 Java Android 应用程序。

该 xml 文件的长度可能会有很大差异,因此我认为我需要在消息开头添加一些内容来标识该 xml 文件的长度。 Socket.SendFile(..) 有一个参数,我已经开始编码:

long fileLength = xmlFile.BaseStream.Length;
byte[] prepend = BitConverter.GetBytes(fileLength);
xmlFile.Close();

client.SendFile("test.xml", prepend, null, TransmitFileOptions.UseDefaultWorkerThread);

我的问题是,理论上这个应用程序应该在几个不同的操作系统和不同的电脑上运行。尽管在大多数情况下事情应该是相同的,但我担心如何处理 long 不是 64 位的情况,我相信这是可能的?

在我的java android应用程序中我希望前8个字节是一个long,代表我的xml文件的大小(以字节为单位)..其余的我将解析回一个xml文件。但是如果主机运行 C# 应用程序的机器不使用 64 位,这不会导致大问题吗?

如果有的话,有什么建议可以解决吗?我能想到的唯一听起来很愚蠢的事情就是向我的前缀发送一个前缀字节,表示我即将接收的字节数!

最佳答案

在 C# 中,long只是 System.Int64 的另一个别名。无论您使用什么机器,Int64 始终是 64 位。

关于c# - 如何为在套接字上发送的文件创建长度前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20732306/

相关文章:

c# - 类型未定义 - C# 类到 VB.NET

c# - 如何动态更改 WPF 中 GridView 列的顺序?

c - 在 C 中以 block 的形式将内存写入套接字

java - 套接字关闭不抛出 IOException

sockets - Electron TCP socket

C#:编码包含数组的结构

c# - 在 iOS 中使用 .NET 和 Objective-C 创建聊天服务器?

java - 我到底应该在这段代码中更改什么才能设置保存文件的路径?

java - Android Intent 和这个新 Intent 的对象(实例)

java - 将 DateFormatter 与 JFormattedTextField 结合使用