我正在嘗試在Android和Windows 10設備之間創建一個聊天應用程序。 我已經使用DataOutputStream
從Android成功發送了文本,並使用數據讀取器類在Windows 10中讀取它。DataInputStream在讀取時掛起
我的問題是Android不能識別來自Windows的文本。它顯示datainputstream.available()
函數的結果,但應用程序掛起以防我使用readString()
或readbyte()
函數。
代碼Android中的接收:
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();
}
什麼是這裏的問題?
窗口大小是否在首次交易時寫入Int? –
什麼是DataWriter?爲什麼你不使用DataOutputStream來補充你的DataInputStream?你在哪裏編寫正在讀取的長度單詞,以及在哪裏調用available()你描述的是什麼? – EJP
@EJP:Datawriter是windows uwp中的writer類。我正在寫這個工作到一個文本框 – harishdvvvvv