gpt4 book ai didi

java - 套接字长读数据

转载 作者:行者123 更新时间:2023-12-01 15:50:46 25 4
gpt4 key购买 nike

这是我的代码:

private String receiveData(String sjson) {
Log.i(TAG,"send request: " + sjson);
String jstr="";
try {
OutputStream out = s.getOutputStream();
out.write(sjson.getBytes());
out.flush();
//out.close();
Log.v(TAG,"sended data");
BufferedReader input = new BufferedReader(new InputStreamReader(s.getInputStream()));
char[] cbuf = new char[1];
input.read(cbuf);
String size = new String(cbuf);
while (input.read(cbuf) != 0) {
if((new String(cbuf)).equals("{") == true)
break;
size = size + new String(cbuf);
}
char[] jbuf = new char[Integer.valueOf(size)];
input.read(jbuf);
jstr = "{" + new String(jbuf);
}catch (Exception e) {
Log.e(TAG,e.toString());
}
Log.d(TAG,"responce: " + jstr);
return jstr;
}

public void connectSocket() {
Log.v(TAG,"connecting Socket: "+URL+":"+PORT);
try {
s = new Socket(URL, PORT);
Log.v(TAG,"connect Socket!");
ERROR_CODE = 0;
}catch (Exception e) {
Log.e(TAG,e.toString());
ERROR_CODE = ERROR_SOCKET_CONNECT_SUCCESSFULL;
}
Log.e(TAG,getErrorMsg(ERROR_CODE));
}

public void closeSocket() {
Log.v(TAG,"closeSocket");
try {
s.close();
}catch (Exception e) {
Log.e(TAG,e.toString());
}
}

在服务器上,答案不到一秒。在客户端,经过 1 分钟后才读取数据。

应用程序停止在 input.read(cbuf); 等待答案。

日志:

05-23 06:35:17.540: VERBOSE/Utilits(358): Auth: 77.221.129.100:10598
05-23 06:35:17.660: INFO/Utilits(358): send request: 0119{"data":{"password":"12345","imei":"000000000000001"},"method":"login"}
05-23 06:36:17.909: DEBUG/Utilits(358): responce: {"response":{"success":true,"user":{"id":"6","properties":{"auto":"model":"audi","color":"ffff","number":"td123r"}},"is_driver":"1"}}}

为什么要花这么长时间才能阅读答案?

最佳答案

你到底希望这个方法做什么?它里面有bug,但它做了它应该做的事情。

  • 您应该在创建 InputStreamReader 时指定编码/字符集
  • 为什么要从头开始一个字符地读到“{”
  • 为什么要为点击“{”之前读取的每个字符创建一个字符串
  • 为什么要在循环中附加字符串?如果必须追加,请使用 StringBuilder。
  • input.read 返回一个整数,表示您已收到多少字节/字符它永远不能保证它将填充缓冲区。因此您可能无法获取所有数据。
  • 为什么不关闭资源?

..现在来看看为什么它可能会很慢。服务器是否正在刷新数据?如果没有,请确保服务器正在刷新数据。

关于java - 套接字长读数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6095209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com