服务器线程显示连接问题

时间:2016-08-10 10:55:18

标签: java sockets server

我创建了一个服务器线程(使用套接字)。我最近得到了一个新的要求,我需要向用户添加消息,以便在通信出现问题时通知他,我添加了一个计数器,计算在通信丢失期间我有多少异常以及它是否相等到SERVER_MAX_NUM_TRIES我需要向用户显示消息。

我尝试了很多东西,但它没有按照预期的那样起作用。

到目前为止,这是我的代码:

public ServerNetworkThread()
{
    setName("ServerNetworkThread");
    _port = 5555;
    _excetionCounter = 0;
}

@Override
public void run()
{
    _isWorking = true;
    while(_isWorking)
    {
        try
        {
            _serverSocket = new ServerSocket();
            _serverSocket.setReuseAddress(true);
            _serverSocket.bind(new InetSocketAddress(_port));

            _socket = _serverSocket.accept();
            _socket.setSoTimeout(Consts.CLIENT_SOCKET_TIMEOUT);
            parseCommand();

            _socket.close();
            _serverSocket.close();

            _excetionCounter = 0;
        }
        catch (IOException e)
        {
            Log.d("anton","server got exception _excetionCounter="+_excetionCounter);
            e.printStackTrace();
            _excetionCounter++;
            if(_excetionCounter == SERVER_MAX_NUM_TRIES)
            {
                _isWorking = false;
                Logics.getInstance().getNetworkManager().sendCommand(_handler, Consts.Requests.CONNECTION_SERVER_ERROR_MESSAGE, null);
            }
        }
    }
}

private void parseCommand() throws IOException
{
    InputStream iStream = _socket.getInputStream();
    InputStreamReader in = new InputStreamReader(iStream, Charset.forName("UTF-16LE"));
    DataOutputStream outToClient = new DataOutputStream(_socket.getOutputStream());
    char[] buf = new char[1024];
    int lettersCount = in.read(buf, 0, buf.length);
    String request = new String(buf,0,lettersCount);

    String responseStr = parseResponse(request);
    byte[] response = responseStr.getBytes("UTF-16LE");
    outToClient.write(response);
    outToClient.flush();
    outToClient.close();
    in.close();

}

}

当我模拟通信问题时,请拔掉以太网线,没有任何事情发生。

更新:

没有使用第二个内循环我得到了这个例外 java.net.BindException:绑定失败:EADDRINUSE(地址已在使用中)

0 个答案:

没有答案