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

标签 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;
}

然后绑定(bind)到我的输入和输出,如下所示:

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)

最佳答案

这些方法在任何时候都不会返回 null,并且没有任何证据表明有其他情况。这里唯一为 null 的是异常的本地化消息和 m_input,因为您自己将其设置为 null,或者因为它最初为 null 并且根本没有设置过。尝试以简单的方式进行操作并打印堆栈跟踪。当你这样做时,你会发现异常是由 new ObjectInputStream() 抛出的。所有这些都是显而易见的,但它被你对异常处理不当所掩盖。

当您执行此操作时,请重命名您的方法。 Bind 在套接字编程中已经具有一定的意义,但不是这样。

关于java - 为什么我的套接字 getInputStream 返回 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13537691/

相关文章:

java - JodaTime:用 Z 代替的日期时间 -04:00

java - 生活游戏中的蟾蜍图案

java - 打开 JDBC ResultSets 的数量是否有限制?

java - rxjava 当超时时跳过项目并继续下一个项目

node.js - socket.io 客户端未连接到在 socket.io 中创建的 azure 服务器

Java ServerSocket 多次连接到同一个套接字

java - 重复 LinearLayout 并稍作更改

c - 在windows中发送Raw arp回复包

linux - read() 会在 select() 之后阻塞吗?

c# - HttpContext.Response基础套接字意外关闭