在位于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();
}
答案 0 :(得分:0)
继续检查套接字连接是否仍然打开或在无限循环内使用isClosed(),当服务器关闭其连接时,isClosed()变为true,然后显示消息或toast,向用户提供所需的原因。
答案 1 :(得分:0)
听起来就像你用来读取套接字是阻塞读取一样,并在套接字关闭时抛出异常并且它在读取时停留。确保read在try块中,并使用catch / finally优雅地退出当时正在执行的操作。