Я работаю над проектом Android Studio в Java, который отправляет изображение на сервер python для обнаружения лица, сервер возвращает «1», если на отправленном изображении есть лица, и «0», если их нет.
Клиентский сокет может отправлять на сервер строку base64 изображения, и сервер также принимает ее и обнаруживает лица, но всякий раз, когда мой серверный сокет возвращает результат в форме JSON на клиентский сокет, поток вна стороне клиента запускается блок исключений, и результат не читается, и я получаю эту ошибку java.net.SocketException: сброс соединения.
Помогите, пожалуйста. Вот мой код для клиентской и серверной части.
Клиентская сторона
private void sendMsg(final String obj) {
final Handler handler = new Handler();
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
try {
Socket s = new Socket("192.168.10.4", 5000);
OutputStream out = s.getOutputStream();
PrintWriter output = new PrintWriter(out);
output.println(obj);
output.flush();
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
final String ss = reader.readLine();
handler.post(new Runnable() {
@Override
public void run() {
try {
JSONObject obj = new JSONObject(ss);
String lab = obj.getString("label");
if (lab.equalsIgnoreCase("1")) {
prediction.setText("face detected");
} else {
prediction.setText("face not detected");
}
} catch (JSONException e) {
e.printStackTrace();
Log.e("thread error: ", "error inside thread");
}
}
});
} catch (IOException e) {
e.printStackTrace();
Log.e("thread error: ", "error outside thread");
}
}
});
thread.start();
}
Серверная сторона
import dlib
import base64
import io
import time
import codecs
from PIL import Image, ImageFile
ImageFile.LOAD_TRUNCATED_IMAGES = True
import face_recognition
import cv2
from imageio import imread
import matplotlib.pyplot as plt
from io import StringIO
def threaded(c):
data = c.recv(4096)
#FACE DETECTION CODE WHICH ISNT THE PART OF THE PROBLEM#
boxes = 1
if(len(boxes)!= 0):
label = "1"
else:
label = "0"
c.send( json.dumps({"label":label }).encode('utf-8') )
print( label )
print( "Data" , json.dumps({"label": label }) )
#print ("...")
c.close()
port = 5000
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(( "0.0.0.0" , port ))
print("socket binded to port", port )
s.listen(5)
print("socket is listening")
all_conn = []
while True:
conn, addr = s.accept()
print('Connected to :', addr[0], ':', addr[1])
all_conn.append( conn )
start_new_thread(threaded, (conn,))
s.close()