Ich versuche, eine Chat-Anwendung zwischen Android und einem Windows 10-Gerät zu erstellen. Ich habe erfolgreich Text von Android mit DataOutputStream
gesendet und las es in Windows 10 mit einer Datenleserklasse.DataInputStream hängt beim Lesen
Mein Problem ist Android ist nicht in der Lage, den Text von Windows zu erkennen. Es zeigt das Ergebnis der datainputstream.available()
Funktion, aber die Anwendung hängt, falls ich die readString()
oder die readbyte()
Funktion verwende.
-Code in Android für Empfang:
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");//
}
Daten von Windows über datawriter
gesendet:
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();
}
Was ist das Problem hier?
Ist die Fenstergröße bei der ersten Transaktion Int schreiben? –
Was ist ein 'DataWriter', und warum verwenden Sie nicht' DataOutputStream', um Ihren 'DataInputStream' zu ergänzen, und wo schreiben Sie das Längenwort, das Sie lesen, und wo ist der Aufruf von' available() ' Das beschreibst du? – EJP
@EJP: DataWriter ist die Writer Stream-Klasse in Windows uwp. Ich schreibe die Arbeit in ein Textfeld – harishdvvvvv