繁体   English   中英

带Python服务器和Java客户端的TCP套接字

[英]TCP Socket with Python server and Java client

我正在尝试在Python服务器(理想情况下是具有通过GPIO连接的某些设备的Raspberry Pi)和Java客户端(再次,主要目标是Android应用)之间交换一些字符串数据。 无论如何,以下代码在标准本地PC上运行。

这是服务器的代码,从这里获取(并稍作修改):

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中我直接发送字符串,因此可能是错误的。

任何帮助将不胜感激!

原来,这是一个冲洗问题。

显然,到达行尾时不会刷新缓冲区(这是我期望的行为)。

添加一个简单的out.flush()解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM