我一直在为这一整天而战。我需要在C#服务器和Java客户端之间发送字符串(JSON)。我必须将前4个字节(总是4个字节)作为消息的长度(头部,这样我们知道消息的剩余时间),然后是消息的正文。流在应用程序的整个生命周期内保持打开状态。就我个人而言,我只是用'\ n'分隔每条消息,然后使用readLine(),但客户端需要这样。在c#和java套接字之间读取和写入数据
我需要C#端发送和接收这些消息以及Java端。不太确定如何编码和解码所有内容。
一些我一直在玩的位:
C#发送
byte[] body = Encoding.ASCII.GetBytes(message);
byte[] header = BitConverter.GetBytes((long) body.Length);
foreach (byte t in header)
{
networkStream.WriteByte(t);
}
foreach (byte t in body)
{
networkStream.WriteByte(t);
}
我没有得到C#接收呢。 Java的发送:
byte[] dataToSend = data.getBytes();
byte[] header = ByteBuffer.allocate(4).putInt(dataToSend.length).array();
ByteArrayOutputStream output = new ByteArrayOutputStream();
output.write(header);
output.write(dataToSend);
output.writeTo(outputStream);
的Java得到:
byte[] header = new byte[4];
int bytesRead;
do {
Debug.log("TCPClient- waiting for header...");
bytesRead = reader.read(header);
ByteBuffer bb = ByteBuffer.wrap(header);
int messageLength = bb.getInt();
Debug.log("TCPClient- header read. message length (" + messageLength + ")");
byte[] body = new byte[messageLength];
do {
bytesRead = reader.read(body);
}
while (reader.available() > 0 && bytesRead != -1);
}
while (reader.available() > 0 && bytesRead != -1);
我知道代码是不是所有的完整的,但任何人都可以提供任何帮助?
我会在C#上使用TextReader和StreamWriter。很容易,你可以直接用字符串写和读消息。 – weismat
正如我所说,我没有选择。我必须发送前4个字节作为消息的长度。 – Dylan