为什么我的套接字getInputStream返回null?

时间:2012-11-24 02:19:52

标签: java sockets

我正在尝试创建一个连接到游戏登录数据库并连接到聊天服务器的应用程序,但每当我尝试使用Socket.getInputStream()函数时,它会抛出一个异常,并且不会给我任何东西......我不知道为什么会这样做,所以我想知道你们中是否有人可以提供帮助..

我这样连接:

public boolean Connect( String RemoteHostIP, int RemotePort )
{
    try
    {
        if( m_Socket != null )
        {
            m_Socket.close( );
            m_Socket        = null;
        }

        m_Socket            = new Socket( );
        m_Host              = RemoteHostIP;
        m_Port              = RemotePort;

        m_Socket.connect( new InetSocketAddress( m_Host, m_Port ) );

        System.out.println( "   ~ Connected to: " + m_Socket.getInetAddress( ).getHostAddress( ) + ":" + m_Socket.getPort( ) );
    }
    catch( SocketException Ex )
    {
        m_Socket            = null;
        System.err.println( "[SocketHelper::Connect SEN] " + Ex.getLocalizedMessage( ) );
        return false;
    }
    catch( IOException Ex )
    {
        m_Socket            = null;
        System.err.println( "[SocketHelper::Connect IOE] " + Ex.getLocalizedMessage( ) );
        return false;
    }

    return true;
}

然后像这样绑定到我的输入和输出:

public boolean Bind( )
{
    try
    {
        if( !m_Socket.isConnected( ) || m_Socket.isClosed( ) || !m_Socket.isBound( ) )
            return false;

        if( m_Socket.getOutputStream( ) != null )
        {
            m_Output            = new ObjectOutputStream( m_Socket.getOutputStream( ) );
            m_Output.flush( );
        }
        if( m_Socket.getInputStream( ) != null )
        {
            m_Input             = new ObjectInputStream( m_Socket.getInputStream( ) );
        }
    }
    catch( SocketException Ex )
    {
        System.err.println( "[SocketHelper::Bind SEN] " + Ex.getLocalizedMessage( ) + " (" + m_Output + " | " + m_Input + ")" );
        return false;
    }
    catch( IOException Ex )
    {
        System.err.println( "[SocketHelper::Bind IOE] " + Ex.getLocalizedMessage( ) + " (" + m_Output + " | " + m_Input + ")" );
        return false;
    }

    return true;
}

这是我的输出

    ~ Connected to: 96.127.149.202:11031
Failed to Connect: Could not bind to socket
[SocketHelper::Bind IOE] null (java.io.ObjectOutputStream@1202f4d | null)

2 个答案:

答案 0 :(得分:1)

这些方法都不会在任何时候返回null,并且此处没有任何证据可以暗示其他方法。这里唯一的null是异常的本地化消息和m_input,因为你自己将它设置为null,或者因为它最初是null而且从来没有设置过。尝试以简单的方式完成并打印堆栈跟踪。执行此操作时,您会发现新的ObjectInputStream()抛出异常。所有这一切都是显而易见的,但是由于你对异常的不良处理而被伪装。

当你在它时,请重命名你的方法。绑定已经在套接字编程中有意义,这不是它。

答案 1 :(得分:-1)

我以前处理过这个问题,而ObjectInputStreams有时候表现不正常。在我的情况下,我发现服务器连接需要先创建一个ObjectOutputStream,否则它会像它一样返回null。服务器代码是否是您自己的代码,如果是这样,请确保在尝试在客户端上创建ObjectInputStream之前首先创建ObjectOutputStream。

这是一个链接,可以帮助描述我曾经回答的问题,这个问题与您的问题类似。它与正在创建的流的顺序或顺序有关。

Object outputstream programmig