我正在嘗試在 Python 服務(wù)器(理想情況下,具有通過(guò) GPIO 連接的某些設(shè)備的 Raspberry Pi)和 Java 客戶(hù)端(同樣,主要目標(biāo)是 Android 應(yīng)用程序)之間交換一些字符串?dāng)?shù)據(jù)。無(wú)論如何,下面的代碼是在標(biāo)準(zhǔn)的本地 PC 上運(yùn)行的。這是服務(wù)器的代碼,取自(并稍作修改)here:import socketserverimport datetimeclass 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客戶(hù)端如下: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); } } }沒(méi)有拋出任何異常,它只是在客戶(hù)端等待響應(yīng)時(shí)卡住了,我永遠(yuǎn)看不到"Read!"服務(wù)器端的消息。來(lái)自網(wǎng)絡(luò)上的"date".getBytes()某個(gè)地方,我發(fā)現(xiàn) Python 套接字需要字節(jié)(UTF-8),但在 Java 中我直接發(fā)送字符串,所以它可能是錯(cuò)誤的。任何幫助將不勝感激!
1 回答

慕標(biāo)5832272
TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊
原來(lái),這是一個(gè)沖洗問(wèn)題。
顯然,當(dāng)?shù)竭_(dá)行尾時(shí),緩沖區(qū)不會(huì)被刷新(這是我期望它的行為方式)。
添加一個(gè)簡(jiǎn)單out.flush()
的解決了這個(gè)問(wèn)題。
添加回答
舉報(bào)
0/150
提交
取消