正常处理socket.close()

时间:2012-05-29 18:53:05

标签: java android sockets client client-server

在位于Android设备中的服务器中,如果客户端的编号超过特定编号,则服务器关闭套接字。但在我的客户端(其他Android设备)我得到一个力量关闭。我怎样才能优雅地处理它? 这是我客户端上的连接部分:

    serverIpAddress = serverIp.getText().toString();

    if (!serverIpAddress.equals(""))
    {
            try
            {
                 InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
                 SocketAddress sockaddr = new InetSocketAddress(serverAddr, 5000);
                 nsocket = new Socket();
                 nsocket.connect(sockaddr);                    
            }catch(Exception e){
                 Log.i("Connect", "Connection Error");
            }

            if (nsocket.isConnected()){
                  score.setText("Your score is " + sc);
                  serverIp.setVisibility(View.GONE);
                  connectPhones.setVisibility(View.GONE);
                  enterIP.setVisibility(View.GONE);
                  Log.i("Connect", "Socket created, streams assigned");
                  Log.i("Connect", "Waiting for inital data..." + nsocket.isConnected());
                  receiveMsg();
            }

2 个答案:

答案 0 :(得分:0)

继续检查套接字连接是否仍然打开或在无限循环内使用isClosed(),当服务器关闭其连接时,isClosed()变为true,然后显示消息或toast,向用户提供所需的原因。

答案 1 :(得分:0)

听起来就像你用来读取套接字是阻塞读取一样,并在套接字关闭时抛出异常并且它在读取时停留。确保read在try块中,并使用catch / finally优雅地退出当时正在执行的操作。