Я пытаюсь обмениваться некоторыми строковыми данными между сервером Python (в идеале, Raspberry Pi с некоторым устройством, подключенным через GPIO) и клиентом Java (опять же, основной целью будет приложение для Android). В любом случае следующий код выполняется на стандартном локальном ПК.
Это код сервера, взятый (и слегка измененный) из здесь :
import socketserver
import datetime
class MyTCPHandler(socketserver.StreamRequestHandler):
def handle(self):
now = datetime.datetime.now()
answer = now
self.data = self.rfile.readline().strip()
print("Read!")
if str(self.data) == 'date':
answer = now.date()
elif str(self.data) == 'time':
answer = now.time()
self.wfile.write((str(answer)+"\n").encode('utf-8'))
print("Sent!")
if __name__ == "__main__":
HOST, PORT = "localhost", 9999
with socketserver.TCPServer((HOST, PORT), MyTCPHandler) as server:
print("Server is running on {}, port {}".format(HOST, PORT))
server.serve_forever()
Клиент Java имеет следующий вид:
public class SocketTest {
public static void main(String[] args) {
try {
Socket s = new Socket("127.0.0.1", 9999);
PrintWriter out = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
out.println("date".getBytes());
String resp = in.readLine();
System.out.println("Received: " + resp);
} catch (IOException ex) {
Logger.getLogger(SocketTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Никаких исключений не выдается, оно просто застревает в ожидании ответа на стороне клиента, и я никогда не вижу сообщения "Read!"
на стороне сервера.
"date".getBytes()
откуда-то из сети, где я обнаружил, что сокеты Python ожидают байты (UTF-8), но в Java я посылаю строки напрямую, поэтому это может быть неправильно.
Любая помощь будет оценена!