使用C#-Example从Java中的Socket读取/写入字节

时间:2017-06-09 06:46:28

标签: java c# sockets

昨天我开始将一些代码从工作的C#-Example传输到等效的Java-Application。

虽然我可以在C#中成功读取/写入字节,并且可以控制我的任何设备,例如启动它们,改变LED灯的颜色等等,它不能用Java工作。

这是C#的工作示例:

try
{
    Int32 port = 4000;
    TcpClient client = new TcpClient(server, port);
    NetworkStream stream = client.GetStream();
    stream.Write(data, 0, data.Length);
    data = new Byte[256];
    Int32 bytes = stream.Read(data, 0, data.Length);
    stream.Close();
    client.Close();
    return data;
}
catch (ArgumentNullException e)
{
    Console.WriteLine("ArgumentNullException: {0}", e);
}
catch (SocketException e)
{
    Console.WriteLine("SocketException: {0}", e);
}
return null;

这是我所拥有的相应的Java代码,它没有编写"数据"数组正确。我需要从byte更改为int,因为目标设备期望0到255之间的数字,Java中的字节从-128到127。

try
{
    int port = 4000;
    Socket socket = new Socket(server, port);
    OutputStream out = socket.getOutputStream();
    DataOutputStream dos = new DataOutputStream(out);

    // send length of data first
    dos.writeInt(data.length);

    // append all the integers to the message
    for(int i = 0; i < data.length; i++){
        dos.writeInt(data[i]);
    }

    // confirm send
    dos.flush();

    data = new int[256];
    InputStream in = socket.getInputStream();
    byte[] b = new byte[in.available()];
    in.read(b, 0, b.length);

    dos.close();
    out.close();
    socket.close();

    return data;
}
catch (Exception e)
{
    System.console().format("Exception: {0}", e);
}
return null;

我希望你能帮助我并告诉我我的错误。

0 个答案:

没有答案