Android socket获取服务器返回的多行数据

Socket连接,客户端接收服务武器返回的字符串数据:

下面是最开始的socket接受程序代码:

String answ = null;


try {
ss = new Socket("192.168.1.23", 9998);
in = new BufferedReader(new InputStreamReader(ss.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(ss.getOutputStream())), true);
if (ss.isConnected()) {
if (!ss.isOutputShutdown()) {
out.println(question);
ss.shutdownOutput();
}
}


answ = in.readLine().toString();
return answ;


} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("到此一步,就是出现异常了");
e.printStackTrace();
}

当服务器返回的只是一行简单的字符串时,没有发现问题,但是,当服务器返回的是多行被分行间隔符分开的字符串时,会发现answ仅仅只收到第一行数据就断开了连接。后更改程序如下:

StringBuffer answ = new StringBuffer();


try {
// 1.建立客户端socket连接,指定服务器位置及端口
Socket socket = new Socket("39.108.88.106", 9190);
// 2.得到socket读写流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os);
// 输入流
InputStream is = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 3.利用流按照一定的操作,对socket进行读写操作
pw.write(question);
pw.flush();
socket.shutdownOutput();
// 接收服务器的相应
String apply = null;
while (!((apply = br.readLine()) == null)) {
answ.append(apply).append('\n');
}
// 4.关闭资源
br.close();
is.close();
pw.close();
os.close();
socket.close();


return answ.toString();

修改之后,可以获取到所有行的数据。虽然简单,但是对于没有用过socket的虾米还是挺有意思的。。。

这个while()循环,挺厉害的。。。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值