java - C# 相当于 Java 的 DataOutputStream?

标签 java c# networking stream netty

我对这个主题做了很多研究,我发现这个问题经常被问到,但没有一个能找到我正在寻找的答案,最常见的解决方案是使用 BinaryWriter 类,但它似乎没有完成它的工作。

对于我的服务器应用程序,我正在使用 Netty 一个基于 Java 的 NIO 网络库,它使用数据输入和数据输出流。我有一个在 Java 中运行的客户端,但它只是用于测试目的,我现在正在将它转移到 C# 以将其放入我的游戏中。

这是基本格式的 C# 代码,只是暂时尝试让事情正常工作..

Client = new TcpClient ();
try 
{
    Client.Connect (IPAddress.Parse ("127.0.0.1"), PORT);
    Stream = Client.GetStream();
    ClientOutput = new BinaryWriter(Stream);
    ClientInput = new BinaryReader(Stream);

    ClientOutput.Write ((string) "UserIsBob");
    ClientOutput.Write ((string) "MyPassLol");
    ClientOutput.Flush();

} 

现在,这看起来不错;但问题是,在使用时

DataInputStream.readUTF()

在 Java 服务器上,什么也没有发生;但是,如果我使用

DataOutputStream.writeUTF(String)

从 java 客户端,服务器将完美读取它并将其打印到控制台。

我真的不确定我做错了什么,但似乎没有太多关于它的信息。我需要的功能如下:

  • 写入字节(字节)
  • WriteBytes(字节[])
  • 写入UTF(字符串)
  • WriteInt(int)
  • WriteLong(长)
  • 写 float ( float )
  • WriteDouble(双)
  • 写 boolean 值( boolean 值)

根据我的理解,您可以通过类型转换在 BinaryWriter 类中完成所有这些操作,但它似乎没有被 Java DataInputStream 接收

看完nodakai贴的纪录片,想出了这段代码:

void WriteUTF(string utf) 
{
    short buffer = (short)System.Text.ASCIIEncoding.ASCII.GetByteCount(utf);
    ClientOutput.Write ((short)buffer);
    ClientOutput.Write ((string)utf);
}

但是,还是不行。

我做了更多调查,发现如果我使用 InputStream.ReadShort() 我可以获得发送的值,因此值为“Hello World”的字符串将是像这样发送

WriteShort(11)
WriteString("Hello World")
Flush()

但是,当在 C# 中执行等效操作时,它仍然无法通过,即使它在 Java 端以相同的方式读取也是如此。

最佳答案

你仔细阅读过Javadoc吗?

DataInputStream.readUTF()/DataOutputStream.writeUTF() 使用自己的编码方案。我不认为 .NET BinaryReader/Writer 可以与它​​们兼容 Unicode 字符串。但是,您可以手动将 Unicode 字符串序列化为长度数据后跟字节序列。

关于java - C# 相当于 Java 的 DataOutputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26391091/

相关文章:

javax.mail.MessagingException : Can't send command to SMTP host

java - 没有 Activity 的 runOnUiThread

java - 计算txt文件中字母字符的出现次数

java - GWT MVP。如何使用事件总线?

c# - 如何为网页编码撇号

c# - 我想将现有的 List<T> 保存到 c# 中的 XML 文件中

amazon-web-services - VPC 可达性分析器区域特定?

mysql - 从nodejs GKE pod连接到外部mysql数据库

c# - 在 UITestControl 而不是 BrowserWindow 的范围内搜索时,CodedUI 无法识别 HtmlControl

java - 如何检查指定端口是否可以通信?