我正在尝试在Android和Windows 10设备之间创建一个聊天应用程序。我已经使用DataOutputStream成功地发送了来自安卓的文本,并使用数据读取器类在Windows 10中读取它。
我的问题是Android无法识别Windows中的文本。它显示datainputstream.available()函数的结果,但是应用程序挂起,以防我使用readString()或readbyte()函数。
用于接收的代码:
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发送的数据
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();
}这里有什么问题?
发布于 2016-06-20 11:57:57
您的dIn.readFully需要字节(而不是String )。此外,它期望精确的字节数,作为length变量。您需要从windows大小的字符串中创建字节,并在第一个事务中将字节数组的长度()作为Int发送给。然后,您需要在第二个事务中传输这个字节数组。试试看。
https://stackoverflow.com/questions/37921077
复制相似问题