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

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008

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; }

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Zion
Registrerad
Apr 2004

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?

[ i5-6600K @ 4.7Ghz || Corsair H110 GTX || 16GB DDR4 || ASUS Z170 Pro Gaming || Asus ROG 1080 Strix @ 2100+/11Ghz+ ]
Unigine Superposition 1080p; 17487 @ Medium; 4594 @ Extreme
"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood

Trädvy Permalänk
Medlem
Plats
Örnsköldsvik
Registrerad
Jun 2008
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; }

| CPU: MMX 200 MHz Intel Pentium I| GPU: Voodo2 3dfx 8 Mb| RAM: SDRAM 32 Mb 133 Mhz | PSU: 3V fläkt 2W | Chassi: HP Vectra VE 5| Skärm: HP Ergo 1024| HDD: Toshiba 2033 MB | OS: Windows 95 B | Mus: HP |

Trädvy Permalänk
Medlem
Plats
Zion
Registrerad
Apr 2004

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

[ i5-6600K @ 4.7Ghz || Corsair H110 GTX || 16GB DDR4 || ASUS Z170 Pro Gaming || Asus ROG 1080 Strix @ 2100+/11Ghz+ ]
Unigine Superposition 1080p; 17487 @ Medium; 4594 @ Extreme
"One is always considered mad, when one discovers something that others cannot grasp."
- Ed Wood