正如我在标题中提到的,我的问题如下:我想使用套接字将C#中的字符串数组发送到也使用套接字的Java应用程序。我试图发送数组的第一项和第二项,但是当我尝试将它们添加到Java应用程序中的数组时,这两个项目粘在一起,所以我无法将它们作为数组项处理。我是套接字编程的新手,所以请帮助我如何在Java应用程序中接收和处理已发送的数组,以及如何正确地在C#应用程序中发送它们。 谢谢你的帮助!
Regrads,Stanley。
编辑:
连接部件没问题,所以我只发布发送部件。 可能不太专业,因为我只是在尝试:
服务器:
String[] texts = new String[2];
texts[0] = "hello";
texts[1] = "world";
for (int i = 0; i < texts.Length; i++)
{
buffer = Encoding.UTF8.GetBytes(texts[i].ToCharArray(), 0, texts[i].Length);
nwStream.Write(buffer, 0, texts[i].Length);
}
客户:(这是我不太自信的地方)
ArrayList<String> texts = new ArrayList<String>();
BufferedReader in;
in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
texts.add(0, in.readLine());
也许是因为readLine,但我不确定。
答案 0 :(得分:2)
实际上,这更多是关于序列化和反序列化的,而不是关于套接字本身。连接到套接字和发送/接收数据的硬件部分将被处理。
您必须决定数据的格式。这不适合你。在您的情况下,您可以使用简单的行终止符(如'\n'
)来为您分隔数据行。在C#端,您的格式代码如下所示:
// assumption: socket is your C# socket
using(NetworkStream str = new NetworkStream(socket))
using(StreamWriter writer = new StreamWriter(str))
{
foreach (string line in arrayOfStrings)
{
// This automatically appends a new line character to the end
// of the line
writer.WriteLine(line);
}
}
在Java方面,您将使用类似的构造。在Java中,等同于StreamReader
的是BufferedReader
。
// socket is your Java socket object
InputStreamReader charReader = new InputStreamReader(socket.getInputStream());
BufferedReader lineReader = new BufferedReader(charReader);
String line;
ArrayList<String> lines = new ArrayList<String>();
// readLine() reads to the first new line character or end of file
// and returns the string up to that point
while ((line = lineReader.readLine()) != null)
{
lines.add(line);
}
// Converting to an array of strings is simple Java from here:
String[] arrayOfLines = lines.ToArray(new String[lines.size()]);
当然,如果您想使用JSON或其他一些发送格式化数据的方法,事情会变得稍微复杂一些。值得庆幸的是,Java和C#都为这些标准格式提供了可靠的串行器/解串器库。