java socket readline 阻塞问题!在线坐等 高悬赏 ,求大神!!!
客户端发送了一个图片转成的用BASE64编码成的字符串,在接收的时候老是只能接收到图片的第一行字符这个要怎么解决,网上找了好久,加什么换行符,可是图片转成的数据也不好加呀...
客户端发送了一个图片转成的用BASE64编码成的字符串,在接收的时候老是只能接收到图片的第一行字符 这个要怎么解决,网上找了好久,加什么换行符,可是图片转成的数据也不好加呀?
客户端发送
socket.connect(isa, 3000);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8")),true);
out.println(sendMsg); //这里的sendMsg为图片转成的字符串,用BASE64编码 形成了很多行的字符串
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
String mstr= null;
mstr = in.readLine();
returnMsg = mstr;
out.close();
in.close();
socket.close();
服务端
Socket socket = serversocket.accept();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(socket.getInputStream(),"UTF-8"));
// 读取数据
String mstr= null;
String mstr2 = null;
mstr2 = buffer.readLine(); //这里读到了图片的第一行数据
System.out.println("mstr2 = " + mstr2);
while(mstr2 != null){
if(mstr == null)
mstr = mstr2;
else
mstr = mstr + mstr2;
if(mstr.length() >5 && !mstr.subSequence(0,5).equals("IMAGE")) break;
mstr2 = buffer.readLine(); ///这里进入了阻塞!!!!只读到了图片的第一行数据
}
String msg = mstr;
// String msg = buffer.readLine();
System.out.println("---->收到客户端请求信息:\r\n" + msg);
System.out.println("---->进入数据处理阶段!");
//进入数据处理阶段DealData 展开
客户端发送
socket.connect(isa, 3000);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(),"UTF-8")),true);
out.println(sendMsg); //这里的sendMsg为图片转成的字符串,用BASE64编码 形成了很多行的字符串
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
String mstr= null;
mstr = in.readLine();
returnMsg = mstr;
out.close();
in.close();
socket.close();
服务端
Socket socket = serversocket.accept();
BufferedReader buffer = new BufferedReader(
new InputStreamReader(socket.getInputStream(),"UTF-8"));
// 读取数据
String mstr= null;
String mstr2 = null;
mstr2 = buffer.readLine(); //这里读到了图片的第一行数据
System.out.println("mstr2 = " + mstr2);
while(mstr2 != null){
if(mstr == null)
mstr = mstr2;
else
mstr = mstr + mstr2;
if(mstr.length() >5 && !mstr.subSequence(0,5).equals("IMAGE")) break;
mstr2 = buffer.readLine(); ///这里进入了阻塞!!!!只读到了图片的第一行数据
}
String msg = mstr;
// String msg = buffer.readLine();
System.out.println("---->收到客户端请求信息:\r\n" + msg);
System.out.println("---->进入数据处理阶段!");
//进入数据处理阶段DealData 展开
展开全部
额,,我想说你这二进制文件非得整成string的目的是什么?你的string是以/n还是/r/n结尾你都难以控制吧,真是醉了。用二进制字符串比这有效的多
out.println(sendMsg); 只传过来一行,你想读几行?当然会阻塞,等你继续传呢。
还是不建议你这样做,虽然怎么做是你的事。。。
out.println(sendMsg); 只传过来一行,你想读几行?当然会阻塞,等你继续传呢。
还是不建议你这样做,虽然怎么做是你的事。。。
更多追问追答
追问
追答
看起来是不行,不要粗暴的使用string,很多字符它是不认识的,二进制文件就用二进制字符流读取,没必要用string,多行整合时多个/r什么的,图片可能会受影响
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询