socke循环获取数据的疑惑

原创 2017年01月02日 22:42:52
在一个系统当中其服务端Socket的代码为:

while (mIsRun) {
try {
// 当有客户端连接上时,创建客户端
final Socket socket = mSever.accept();
new Thread(new Runnable() {
public void run() {
BufferedReader in;
try {
in = new BufferedReader(new InputStreamReader(
socket.getInputStream(), "UTF-8"));
PrintWriter out = new PrintWriter(socket
.getOutputStream());

while (!socket.isClosed()) {
// 读取客户端发送的内容
String receiveStr;
receiveStr = in.readLine();
if (receiveStr == null)
break;
if (receiveStr != null
&& !receiveStr.equals("")) {
if (receiveStr.equals("getNotification")) {
Log.i("Notifacation", "getNotification");

String socketResp = "";
String notifiMsg = "";
if (isCanStartNoitifiServer()) {
checkAllSensorStatus();
notifiMsg = getNotificationMsg();
}
JSONObject jsonResponse = new JSONObject();
try {
jsonResponse.put("notifiId",
mNotifiId);
jsonResponse.put("notifiMsg",
notifiMsg);
socketResp = jsonResponse
.toString();
} catch (JSONException e) {
e.printStackTrace();
}
out.println(Base64.encodeToString(
socketResp.getBytes(),
Base64.DEFAULT));
}
out.flush();
}
}
// 主动关闭socket连接
socket.close();

} catch (IOException e) {
e.printStackTrace();
}
}
}).start();// 开始启动线程

} catch (IOException e) {
e.printStackTrace();
}
}


固然客户端我是这样写的:

                                    // 1.建立客户端socket连接,指定服务器位置及端口
Socket socket = new Socket("192.168.253.2", 8892);
// 2.得到socket读写流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
// 输入流
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
// 3.利用流按照一定的操作,对socket进行读写操作
String info = "getNotification";
pw.write(info);
pw.flush();
socket.shutdownOutput();
// 接收服务器的相应
String reply = null;
if (!((reply = br.readLine()) == null)) {
Log.i("Notification", reply);
}
 // 4.关闭资源
br.close();
is.close();
pw.close();
os.close();
//socket.close();

                                     <!--客户端是可以正常获取一次数据的,Base64没做解码-->
问题来了,服务端的while (!socket.isClosed())不就的判断长连接吗? 既然如此我应该在客户端怎么达到循环的请求和接受呢?
或许我对服务器的写法存在误解呢?

如果我改写客户端为:

     // 1.建立客户端socket连接,指定服务器位置及端口
Socket socket = new Socket("192.168.253.2", 8892);
// 2.得到socket读写流
                                        while(true){
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
// 输入流
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(
new InputStreamReader(is));
// 3.利用流按照一定的操作,对socket进行读写操作
String info = "getNotification";
pw.write(info);
pw.flush();
socket.shutdownOutput();
// 接收服务器的相应
String reply = null;
if (!((reply = br.readLine()) == null)) {
Log.i("Notification", reply);
}
 // 4.关闭资源
br.close();
is.close();
pw.close();
os.close();
                                    }

在输出和输入流添加一个死循环能得到一次数据但死循环是无效的。。。。。。。

NOIP2017小凯的疑惑(提高D1T1)

题面传送门小学奥数题&&结论题给大家一个不太严谨的证明:引用来自 用到一个引理:不定方程ax+by=c(a,b,c>0)ax+by=c(a,b,c\gt0)一定有一组解(x1,y1)(x_1,y_...
  • qwerty1125
  • qwerty1125
  • 2017年11月29日 09:55
  • 389

【NOIp 2017】小凯的疑惑(置顶)

无数人被小学奥数坑到家破人亡,我也不例外。 在此发博文告诫自己无论什么题目都要冷静思考,简单的题目不要想复杂,沉着冷静才能做到最好。 我爱OI,自然要爱屋及乌。我爱小学奥数。#include us...
  • zP1nG
  • zP1nG
  • 2017年11月27日 09:26
  • 2944

2017noip提高组复赛day1小凯的疑惑题解

①题目 ◆描述 小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有 无数个。在不找零的情况下,仅凭这两种金币,有些物品他是          无法准确支付的。现在小凯...
  • Helenal
  • Helenal
  • 2017年12月16日 16:31
  • 304

java中常见疑惑点解密

1、子类的实例化过程:子类实例化的时候(new的时候)先调用子类的构造方法,在构造方法中默认有一条super()语句来调用父类的默认(无惨)构造方法,父类中如果没有其他(含参构造方法)编译器会自动的默...
  • u014756517
  • u014756517
  • 2016年07月16日 16:03
  • 250

第一份工作,入职前的感想和疑惑

作为一个菜鸟程序员,昨天正式收到JJZX的offer,这两天准备去签三方。   这些天以来,其实心理非常烦躁,先说一说我的入门历程吧,刚准备入行的同学也可以参考一下,也希望大神们多多指点。感谢!   ...
  • qq1162195421
  • qq1162195421
  • 2014年01月15日 13:41
  • 1516

NOIP2017Day1T1-小凯的疑惑

1.小凯的疑惑  (math.cpp/c/pas)  【问题描述】  小凯手中有两种面值的金币,两种面值均为正整数且彼此互素。每种金币小凯都有无数个。在不找零的情况下,仅凭这两种金币,有些物品他是无...
  • qq_34531807
  • qq_34531807
  • 2017年11月11日 19:58
  • 1288

【提高组NOIP2017】小凯的疑惑 通俗分析 咱们不数论

小凯的疑惑,不用数论证明a*b-(a+b)公式
  • nimabide_01
  • nimabide_01
  • 2017年12月08日 23:30
  • 84

C# 最基本的Socket编程C# Socke详解

最基本的Socket编程 C#版示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息;这里只是一个简单的示例,是一个最基本的socket编程流程,在接下来的文...
  • wuchen_net
  • wuchen_net
  • 2010年04月08日 13:46
  • 1449

实验吧CTF题目之疑惑的汉字(1876)

题目链接:http://www.shiyanbar.com/ctf/1876 对于这种题,唯一的方法就是积累;见得多了也就不觉得奇怪了; 题目给出了密文,分析密文发现这些汉字没有什么特殊的含义;那...
  • qq_38329811
  • qq_38329811
  • 2017年08月25日 11:07
  • 504

疑惑的汉字

当铺密码  将ASCii码转换成字符
  • myloveprogrmming
  • myloveprogrmming
  • 2016年09月16日 21:52
  • 535
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:socke循环获取数据的疑惑
举报原因:
原因补充:

(最多只允许输入30个字)