首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataInputStream坚持阅读

DataInputStream坚持阅读
EN

Stack Overflow用户
提问于 2016-06-20 11:12:48
回答 1查看 573关注 0票数 1

我正在尝试在Android和Windows 10设备之间创建一个聊天应用程序。我已经使用DataOutputStream成功地发送了来自安卓的文本,并使用数据读取器类在Windows 10中读取它。

我的问题是Android无法识别Windows中的文本。它显示datainputstream.available()函数的结果,但是应用程序挂起,以防我使用readString()readbyte()函数。

用于接收的代码:

代码语言:javascript
复制
DataInputStream  dIn = new DataInputStream(clientSocket.getInputStream());
if(dIn.available()>0)
{
    int length = dIn.readInt();  // app hangs in here
    byte[] byteReceived = new byte[length];
    dIn.readFully(byteReceived, 0 , length); // sometimes app hangs here 
    String textReceived = new String(byteReceived);
    text.setText(Client Says: "+ textReceived + "\n");//
}

通过datawriter**:**从Windows发送的数据

代码语言:javascript
复制
DataWriter writer = new DataWriter(socket.OutputStream))
{
    writer.UnicodeEncoding=windows.Storage.Streams.UnicodeEncoding.Utf8;
    writer.ByteOrder = windows.Storage.Streams.ByteOrder.LittleEndian;
    uint size =writer.MeasureString(message); 
    writer.WriteUint32(size);
    writer.WriteString(message);
    try
    {
        await writer.StoreAsync();
    }
    catch (Exception exception)
    {
        switch (SocketError.GetStatus(exception.HResult))
        {
            case SocketErrorStatus.HostNotFound:
                // Handle HostNotFound Error
                throw;
            default:
                throw;
        }
    }

    await writer.FlushAsync();
    writer.DetachStream();
}

这里有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2016-06-20 11:57:57

您的dIn.readFully需要字节(而不是String )。此外,它期望精确的字节数,作为length变量。您需要从windows大小的字符串中创建字节,并在第一个事务中将字节数组的长度()作为Int发送给。然后,您需要在第二个事务中传输这个字节数组。试试看。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37921077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档