gpt4 book ai didi

java - 发送 C# 和 Java 的套接字数据 - 总体和具体

转载 作者:行者123 更新时间:2023-11-30 11:07:07 29 4
gpt4 key购买 nike

我有几个关于整体“发送”理念的问题,以及关于通过套接字发送各种数据类型和结构的选项的具体问题。

当前阶段

我有一个 Java 应用程序,它像一个服务器和一个用 C# 编写的客户端。我成功连接并从 C# 向 Java 发送整数。

Java

while(true){
try{
int a = input.readInt(); //input is DataInputStream which is initialized in constructor
Console.LogClient("Received {"+a+"}");
}catch(IOException e){
e.printStackTrace();
}
}

C#

TcpClient client = new TcpClient(ip, port);
//Connection established

int value = 11;
System.out.println("Sending: "+value);
byte[] bytes = BitConverter.GetBytes(value);

if (BitConverter.IsLittleEndian)Array.Reverse(bytes);

BinaryWriter a = new BinaryWriter(client.GetStream());
a.Write(bytes);
a.Flush();

enter image description here

问题

  1. Write() 究竟是如何工作的?传递的参数被视为单独的数据包数据集并立即发送(在 Write() 上)和 flush() ..clears.. 什么?或者 Write() 的工作方式类似于“添加到”数据集,所有内容实际上都在 flush() 上发送?
  2. 据我了解,要讨论 C# <-> Java,您发送的所有内容都必须转换为较低级别的 byte[] 数组?虽然对于原始单值来说可能很容易,但是发送 float[]int[] 呢?
  3. 这类似于 2.,如果我想发送 stringfloat[]int[] 怎么办,但是客户端/服务器不知道它会收到。我必须定义特定的“模式”或“标题”吗?我必须单独发送/写入每个元素还是组合?我在这里完全迷路了。
  4. 我未能发送字符串,我使用了a.Write("someText"); 并使用input.readUTF(); 接收但它什么也没做,看起来像卡住了。我什至尝试转换为 byte[] 或/和翻转为大端。

future 计划

我想稍后学习和实现一些优化,例如压缩。据我了解,这是纯粹的 byte[] 操作?如果是这样,BinaryWriter (C#) 和 DataInputStream/DataOutputStream (Java) 是最好的解决方案吗?或者可能会有问题,最好是交给处理此类工作的其他类(class)。

我希望有人能对此有所启发。

非常感谢!

最佳答案

  1. 快速查看BinaryWriter 类的文档,您可以了解到函数write(byte[] array) 将字节数组直接写入底层流。这意味着 flush() 在这里可能不会有所作为。实际引用:“将字节数组写入底层流。”
  2. 您要做的是找到/实现适用于 C# 和 Java 的序列化库,因为这两种语言并不以二进制方式表示对象。执行此操作的一种方法可能是用一个唯一的代码包装每个对象,您可以在两侧跟踪该代码(最好先阅读序列化)。
  3. 看看 Java 网络库 kryonet 至少可以帮助您解决问题的 Java 部分。 (它是一个 Java 到 Java 序列化库)

我只是用一些基础知识写的,所以如果我完全是从屁股里写的,请纠正我

关于java - 发送 C# 和 Java 的套接字数据 - 总体和具体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29050493/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com