在C#套接字中发送字符串数组并在Java套接字中接收

时间:2016-02-11 13:28:49

标签: java c# arrays sockets

正如我在标题中提到的,我的问题如下:我想使用套接字将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,但我不确定。

1 个答案:

答案 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#都为这些标准格式提供了可靠的串行器/解串器库。