在reader.readLine()上从服务器读取数据时发生Java套接字错误
我正在用java开发一个android studio项目,该项目将图片发送到python服务器进行人脸检测,如果发送的图片中有人脸,服务器将返回“1”,如果没有,则返回“0” 客户端套接字能够将图片的base64字符串发送到服务器,服务器接收它并检测人脸,但每当我的服务器套接字以JSON形式向客户端套接字返回结果时,客户端的线程运行到异常块中,结果未被读取,我得到以下错误java.net.SocketException:Connection reset 请帮忙。这是我的客户端和服务器端代码 客户端在reader.readLine()上从服务器读取数据时发生Java套接字错误,java,sockets,Java,Sockets,我正在用java开发一个android studio项目,该项目将图片发送到python服务器进行人脸检测,如果发送的图片中有人脸,服务器将返回“1”,如果没有,则返回“0” 客户端套接字能够将图片的base64字符串发送到服务器,服务器接收它并检测人脸,但每当我的服务器套接字以JSON形式向客户端套接字返回结果时,客户端的线程运行到异常块中,结果未被读取,我得到以下错误java.net.SocketException:Connection reset 请帮忙。这是我的客户端和服务器端代码 客户
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()
服务器端
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()
服务器不应关闭套接字。这通常由客户完成 但是,在没有收到数据的特定超时之后关闭打开的服务器套接字是一种很好的做法