android和python进行socket通信遇到的readLine的坑

python socket作为客户端向安卓服务端发送消息,服务端却接收不到

最近需要使用python和安卓app进行socket通信,python代码如下:

import socket
s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.connect((host, port))
s.send('hello,this is a test info !'.encode())

正常情况下,send执行完之后安卓端就应该收到python发送的信息了。
但是由于Java写的不多,从网上搜的Java的socket代码,基本都是这样的:

serverSocket = new ServerSocket(port);
socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
BufferedInputStream buffer = new BufferedInputStream(inputStream);
String s = buffer.readLine();

Java的readLine函数会一直阻塞直到读取到"\n"。这就导致安卓端始终接收不到消息,在python发送消息的时候将消息后面加个\n就好了,如s.send("hello world\n".encode()),当然使用Java的其他函数应该也是可以的。

另外,python和Java的socket在关闭连接时貌似也会向连接方发送个“\n”,这可以作为连接异常关闭的判断条件。


版权声明:本文为chaootis1原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。