Okay, so habe ich ein Projekt, wo ich mit einem Client (in Lua geschrieben) und einem Server (in Java geschrieben) arbeiten. Ich verwende LuaSocket für den Client und DatagramSockets für den Server. Das Problem ist, wenn ich eine Zeichenfolge vom Client in Lua sende und es auf dem Server empfange (und die Bytes in eine Zeichenkette umwandle), erkennt es den Wert der Zeichenkette nicht als gleich, was es sein sollte (I ' m mit .equals() zur Auswertung). Ich habe das Ergebnis gedruckt und mit der Zeichenfolge verglichen (alles ausgecheckt); Ich habe sogar die Bytes verglichen (mit .getBytes()), sie haben sogar ausgecheckt. Der nervigste Teil davon ist, dass wenn ich die Zeichenkette mit .startsWith() analysiere, sie wahr bewertet, aber nichts anderes funktioniert. Ich habe mir die String-Codierung beider Sprachen angeschaut, aber ich bin relativ neu in Sockets und das geht über mich hinaus.Java zu Lua Socket Kommunikation Fehler
Edit:
auf einige Beispiel-Code zu schreiben, das Problem zu demonstrieren, ich löste es. Hier ist der Code:
Auftraggeber:
local socket = require "socket"
local udp = socket.udp()
udp:settimeout(0)
udp:setpeername("localhost", 1234)
udp:send("foo")
Server:
public class Main
{
public static void main(String args[]) throws Exception
{
DatagramSocket server = new DatagramSocket(1234);
byte[] incomingBytes = new byte[512];
DatagramPacket incomingPacket = new DatagramPacket(incomingBytes, incomingBytes.length);
server.receive(incomingPacket);
String received = new String(incomingBytes);
System.out.println(received);
System.out.println(received.equals("foo"));
for (byte b : received.getBytes())
{
System.out.print(b + " ");
}
System.out.print("\n");
for (byte b : "foo".getBytes())
{
System.out.print(b + " ");
}
System.out.print("\n");
}
}
Das Ergebnis:
foo
false
102 111 111 0 0 0 *I'm not going to include all but there are 506 more*
102 111 111
Die Zeichenfolge Ich hatte die Bytes wurde die Prüfung von zuvor aufgespalten wurde mehrere Punkte, und das würde erklären, warum ich das nicht bemerkt habe.
Könnten Sie Ihren Code aufschreiben (einschließlich der Checks, die Sie mit '.getBytes()' und dergleichen erwähnen)? Es sieht so aus, als ob Sie eine anständige Arbeit bei dem Versuch, es zu debuggen, getan haben, aber zu sagen "es sollte funktionieren, aber es tut nicht" bietet nicht viele Informationen, wie Sie helfen können. – SJuan76
@ SJuan76 Danke für den Hinweis, das ist mein erster Post auf StackOverflow. – user3626355
Ich bin kein Java-Person, aber das sieht für mich wie 'neue String (incomingBytes)' erstellt eine Zeichenfolge aus * alle * die Bytes nicht nur diejenigen, die empfangene Daten enthalten. Sie sollten wahrscheinlich nur eine Zeichenkette aus so vielen Daten erstellen, die Sie tatsächlich erhalten haben, anstatt den gesamten Empfangspuffer zu verwenden. –