我在这个问题上看到了不同的方法。 我有一个用java和c#client编写的服务器。
我发现的大多数数据发送示例数据都是使用以下方式发送的:
从C#客户端发送
TcpClient tcpClient = _tcpClient.Connect(ip, port);
NetworkStream stream = _tcpClient.GetStream();
BinaryWriter s = new BinaryWriter(stream);
//send some info
byte[] bytes = new byte[]{1,2,3}
//capsulated in thread
s.Write(bytes);
s.Flush();
收到
在Java服务器上收到
Socket socket = // create it on incoming connection
DataInputStream input = new DataInputStream(socket.getInputStream());
//we create some magical size byte array
byte[] bytes = new byte[4096];
input.read(bytes);
问题在于,神奇的大小字节数组看起来并不像一个可靠的解决方案。我讨厌创造一些我无法控制或不知道其内容的东西。 因此我想出的解决方案是首先发送字节数组大小
s.Write(bytes.length); //send int or byte array of the int value
s.Flush();
s.Write(bytes);
s.Flush();
并在收到
int size = input.readInt();
byte[] bytes = new byte[size];
input.read(bytes);
所以现在我有字节数组,所有内容都被完全填充。
我不知道为什么,但我对这个解决方案也有疑问,一定是因为我见过只有第一个解决方案的例子。您如何看待第二种解决方案,您可能会看到或者可能存在任何问题,或许有更好的解决方案?
答案 0 :(得分:0)
第二种解决方案很好。我们已在十多个项目中使用此解决方案