Premiär! Fyndchans i SweClockers Månadens Drop

Hur kan jag få error när jag ska försöka sända ett meddelande via Python?

Permalänk

Hur kan jag få error när jag ska försöka sända ett meddelande via Python?

Hej!

Detta är en enkel fråga. Jag försöker sända en sträng från Python till Java igenom att använda sockets. Men jag får inte liksom meddelandet att fungera sända. Det blir ett felmeddelande.

Här är min lilla kodsnutt från Python

try: with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s: s.connect((self.HOST, self.PORT)) print("sending") s.sendall("meddelandet") # Skickas tydligen inte ut! print("done") except: ValueError

Meddelandet "done" skrivs alltså inte ut. Då kan man undra, varför inte då? Jag mottar meddelandet via denna kod. Men denna kodsnutt vet jag att den fungerar. Det är just pythonkoden jag behöver hjälp med.

Min pythonkod är min klient. Javakod är min server. Först så öppnar jag anslutning med Java och sedan ansluter jag med Python. Efter jag har tagit emot mitt meddelande (Java -> Python) så stänger jag min klient i Python. Sedan så ska jag skicka tillbaka ett meddelande (Java <- Python) och då kan vi se koden ovan, som inte fungerar.

Så finns det något som jag har glömt?

public String receiveData() { System.out.println("receiveData"); String received = ""; try { if(dataInputStream.available() > 0) { received = dataInputStream.readUTF(); } }catch (SocketException e) { System.out.println(e.getMessage()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return received; }

Permalänk
Medlem

Hur exakt ser din output ut? För det kan ju antingen vara ett ohanterat exception, en interrupt eller att det bara väntar på time out.

Är det att det bara stannar av?

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Permalänk
Skrivet av Ferrat:

Hur exakt ser din output ut? För det kan ju antingen vara ett ohanterat exception, en interrupt eller att det bara väntar på time out.

Är det att det bara stannar av?

Min output ser ut exakt att den skriver ut "sending" och sedan händer det inget mer. Typ som att den fick ett error.

Errormeddelandet är följande: "a bytes-like object is required, not 'float'". Så hur skriver jag ett bytes om jag vill skicka en sträng?

Jag har lagt till denna och då fungerar det:

print("sending") sendStr = str(self.theList.estimationDelaySeconds) s.sendall(sendStr.encode()) # Send the estimation delayed time back print("done")

Men i Javakoden får jag då "java.io.EOFException".

Edit!
Har löst detta nu!

Svaret är att använda denna javakod då jag skickar inte strängar, utan bytes.

public String receiveData() { System.out.println("receiveData"); String received = ""; try { int c; // Read while ((c = dataInputStream.read()) != -1) { received += (char) c; } } catch (SocketException e) { System.out.println(e.getMessage()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return received; }

Permalänk
Medlem

Okej är "meddelandet" en vanlig string du försöker skicka? Du måste skicka det i byte form.

Testa skriva b'meddelandet'
och se om du kan skicka då

Du måste även göra om steamen du tar emot i Java från bytes till char innan du försöker hantera det vidare isf

EDIT;

Missa att du löst det redan, va bra

Visa signatur

"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood