【问题标题】:Sockets receiving null (Android)套接字接收 null (Android)
【发布时间】:2023-03-30 13:45:01
【问题描述】:

我有一个与服务器通信的 android 应用程序(用 java 编写)。 在这两部分之间我已经建立了一个 Socket 连接并想要发送数据。 我遇到的问题是,有时对于某些用户来说,到达服务器的信息是空的。

这有效(适用于所有手机、所有用户):
服务器:

int a = Integer.parseInt(in.readLine());
int b = Integer.parseInt(in.readLine());
int c = Integer.parseInt(in.readLine());
int d = Integer.parseInt(in.readLine());
String checksum = in.readLine();
String model = in.readLine();
String device = in.readLine();
String name = in.readLine();

客户:

out.println(a);
out.println(b);
out.println(c);
out.println(d);
out.println(hash);
out.println(Build.MODEL);
out.println(Build.DEVICE);
String name = fixName();
out.print(name);
out.flush();

这不起作用(对于某些用户):
服务器:

int a = Integer.parseInt(in.readLine());
String checksum = in.readLine();
String model = in.readLine();
String device = in.readLine();
String name = in.readLine();
String msg = in.readLine();
int version = -1;
String test = "hej";
try{
    test = in.readLine();
    version = Integer.parseInt(test);
}catch(Exception e){
    e.printStackTrace();
}

客户:

out.println(a);
out.println(hash);
out.println(Build.MODEL);
out.println(Build.DEVICE);
String name = fixName();
if(name == null) name = "John Doe";
out.println(name);
String msg = fixMsg();
if(msg == null) name = "nada";
out.println(msg);
out.println(curversion);
out.flush();

有时,在第二种情况下,名称、消息和版本(字符串测试)在服务器端为空。由于 test 为空,因此触发了 catch。
curversion,a 为整数,其余为字符串。

有什么想法吗?

【问题讨论】:

    标签: java android sockets null


    【解决方案1】:

    这里的编码很糟糕。每次调用 readLine() 时都必须立即测试结果是否为 null,如果为 true,则停止读取并关闭流。

    这种特殊情况是 Scanner 的工作。

    【讨论】:

      【解决方案2】:

      错误出在其他地方,错过了许可。不,它不是 INTERNET,它是 READ_PHONE_STATE。当 READ_PHONE_STATE 不可用时,getDeviceId() 对于某些手机上的某些版本返回 null。

      【讨论】:

        猜你喜欢
        • 2013-04-20
        • 2018-11-07
        • 2015-03-22
        • 2012-06-08
        • 1970-01-01
        • 2016-08-04
        • 2014-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多