Java Socket返回True

时间:2010-05-10 12:54:39

标签: java sockets

我希望你能提供帮助。我是一个相当新的编程和我玩Java套接字。

问题是以下代码。由于某种原因commSocket = new Socket(hostName, portNumber);即使未与服务器连接(服务器尚未实现!)也会返回true。关于这种情况的任何想法?

对于hostName,我传递本地机器IP,端口是手动选择的端口。

public void networkConnect(String hostName, int portNumber){

    try {
        networkConnected = false;
        netMessage = "Attempting Connection";
        NetworkMessage networkMessage = new NetworkMessage(networkConnected, netMessage);

        commSocket = new Socket(hostName, portNumber);

        // this returns true!!
        System.out.println(commSocket.isConnected());

        networkConnected = true;
        netMessage = "Connected: ";


        System.out.println("hellooo");

    } catch (UnknownHostException e){
        System.out.println(e.getMessage());

    } catch (IOException e){
        System.out.println(e.getMessage());

    }
}

非常感谢。

编辑:新的套接字(..,..);阻止不是吗?我认为在那种情况下,如果没有例外处理,那么我们有一个真正的连接?

编辑:我玩过反病毒,现在它正在运行!

2 个答案:

答案 0 :(得分:3)

几天前在公司计算机上遇到过完全相同的情况,并且搜索了几个小时。

检查您的防病毒软件,某些防病毒软件(如E*** N**32)使用实时TCP扫描即使没有正在侦听目标端口也能使连接成功,但是当您尝试从套接字读取/写入时将重置它

将此添加到您的代码中:

commSocket.getOutputStream().write(0);
commSocket.getInputStream().read();

如果您现在收到SocketException,您应该考虑更改防病毒软件。

或者,在创建套接字后立即在应用程序中设置断点,然后使用netstat -ano(在Windows上)检查哪个进程ID与套接字的另一个端点关联(应该在您的计算机上)如果你连接到localhost)。

我建议您禁用防病毒软件,但在某些情况下,即使这样也无法卸载破坏的实时TCP扫描驱动程序......

答案 1 :(得分:1)

Socket constructor会立即连接,如果不成功则会抛出IOException。显然你已成功连接到服务器(这可能是你自己没有制作的)。