【发布时间】:2014-12-11 00:49:32
【问题描述】:
我对该主题进行了相当多的研究,我发现这个问题经常被问到,但他们都没有我正在寻找的答案,最常见的解决方案是使用 BinaryWriter 类是 C# 附带的,但它似乎没有做它的工作。
对于我的服务器应用程序,我正在使用 Netty 一个基于 Java 的 NIO 网络库,它使用 DataInput 和 DataOutput 流。我有一个在 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 客户端,服务器将完美读取并打印到控制台。
我真的不确定我做错了什么,但似乎没有太多关于它的信息。我需要的功能如下:
- WriteByte(字节)
- WriteBytes(byte[])
- WriteUTF(字符串)
- WriteInt(int)
- WriteLong(long)
- WriteFloat(float)
- WriteDouble(double)
- WriteBoolean(boolean)
据我了解,您可以通过类型转换在 BinaryWriter 类中完成所有这些操作,但它似乎没有被 Java DataInputStream 接收
看了野田开的纪录片后,我想出了这个代码:
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 端以相同的方式读取。
【问题讨论】:
标签: java c# networking stream netty