Java-socket-server, C# - socket-client, Probleme bei der Kommunikation?
Erm, ich bin neu in Steckdosen und auch neuere Java, so dass Java-Seite ist im Grunde genommen kopiert und eingefügt werden. Der C# - Seite ist ein wenig mehr selbst gemacht.
Ich bin gekommen, zu denken, dass es möglicherweise einige Unterschiede in der Art und Weise Java-und C# - strings interpretieren; ich habe es teilweise arbeiten mit der jetzt veraltet "readLine" - Methode in Java.
Auf der C# Seite:
private void pollChat()
{
while (clientSocket.Connected)
{
try
{
NetworkStream serverStream = clientSocket.GetStream();
byte[] inStream = new byte[10025];
serverStream.Read(inStream, 0, (int)clientSocket.ReceiveBufferSize);
string returndata = System.Text.Encoding.UTF8.GetString(inStream);
msg(returndata);
}
catch (SocketException)
{
clientSocket.Close();
msg("Socket Exception");
}
}
}
... für den Erhalt der Dinge, (die ich geändert habe System.Text.- Codierung.ASCII, UTF8, aber es hat nicht geholfen) ... und
NetworkStream serverStream = clientSocket.GetStream();
byte[] outStream = System.Text.Encoding.UTF8.GetBytes(nickname + ": " + textBoxToSubmit.Text + "$");
serverStream.Write(outStream, 0, outStream.Length);
serverStream.Flush();
... für den Versand Dinge.
Auf die Java-server-Seite...
void sendToAll( String message ) {
synchronized( outputStreams ) {
for (Enumeration e = getOutputStreams(); e.hasMoreElements(); ) {
DataOutputStream dout = (DataOutputStream)e.nextElement();
try {
dout.writeBytes( message );
} catch( IOException ie ) { System.out.println( ie ); }
}
}
}
... für das senden Dinge, und
while (true) {
//... read the next message ...
String message = din.readUTF();
//... tell the world ...
System.out.println( "Sending "+message );
//... and have the server send it to all clients
server.sendToAll( message );
}
... für den Erhalt der Dinge.
Ich entschuldige mich für die riesige Menge von eingefügten code, aber bitte Geduld mit mir.
Vielen Dank im Voraus!
Können Sie nach, welches Verhalten Sie immer, dass Sie nicht erwarten,... mit beiden UTF8 und ASCII? Wenn Sie zufrieden sind, nur mit englischen Buchstaben, ich würde empfehlen, geht zurück auf ASCII, so können Sie konzentrieren sich auf ein Thema zu einer Zeit.
Gut, ich habe es geschafft, die C# - Seite zu übertragen, um die Java-server, aber jetzt bin ich verwirrt, wie Java übertragen, zurück in die C# - Seite. Bitte sehen Sie die "Antwort" weiter unten gepostet, dass ich.
Also deine eigentliche Frage ist "Wie kann ich übertragen Sie Daten zurück an einen Java-Socket aus einem C# - socket -?" Vielleicht lohnt es, sich Gedanken über Ihre Frage, ein wenig erste und aktualisiert werden, anstatt mit Verweis auf "Kommunikationsprobleme", ... es könnte dazu führen, dass weniger Probleme bei der Kommunikation. ;p
Sie erkennen, dieser thread ist fast drei Jahre alt? Auch wenn das meine Frage (ich habe nicht die Zeit jetzt überprüfen), ich glaube nicht, dass Feindseligkeit helfen würde "Kommunikation."
InformationsquelleAutor Jonathan Chan | 2010-02-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das erste, was mir auffällt, ist, dass du versuchst zu Lesen, dass ein Unicode-string direkt aus einem stream. Dies ist aus zwei Gründen problematisch.
aufrufen einer Lesen, wenn Sie eine ungerade
die Anzahl der bytes im Puffer ist
entweder zu blockieren oder just cause
Müll raus zu kommen. Weder das eine ist besser.
bytes in C# und senden Sie aus, es gibt keine header-Angabe der
Länge der Daten, noch ist es ein
terminator-Zeichen angegeben, so gibt es keine
Weg, zu sagen, am empfangenden Ende (Java in diesem Fall), wenn der string
abgeschlossen.
Ich würde nicht empfehlen, mit readUTF oder jede Funktion, außer die, die auszieht, raw-bytes. Sobald Sie gemeistert haben die beiden Probleme, die ich oben erwähnt musst du ein byte-array mit einem kompletten Nachricht. Erst dann sollten Sie versuchen zu konvertieren, werden die bytes in Ihre korrekte Kodierung.
Die Auswahl als Antwort, da @StevenJeuris scheint sich auf eine Art Kreuzzug zu lösen, das drei Jahre alte Fragen. Was ich sagen kann, diese Antwort hat mir geholfen, eine Lösung zu finden.
InformationsquelleAutor Spencer Ruport