Java套接字返回True

Java套接字返回True,java,sockets,Java,Sockets,我希望你能帮忙。我对编程相当陌生,我在玩java套接字 问题在于下面的代码。出于某种原因,commSocket=新套接字(主机名、端口号)返回true,即使它尚未连接到服务器(服务器尚未实现!)。对这种情况有什么想法吗 对于主机名,Im传递我的本地机器IP,对于端口,手动选择端口 public void networkConnect(String hostName, int portNumber){ try { networkConnected = false;

我希望你能帮忙。我对编程相当陌生,我在玩java套接字

问题在于下面的代码。出于某种原因,
commSocket=新套接字(主机名、端口号)返回true,即使它尚未连接到服务器(服务器尚未实现!)。对这种情况有什么想法吗

对于主机名,Im传递我的本地机器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());

    }
}
非常感谢

编辑:新套接字(…,…);是阻塞,不是吗?我想在这种情况下,如果处理过程中没有例外,那么我们就有了真正的联系


编辑:我玩了反病毒,现在它正在工作

立即连接,如果不成功,将抛出。显然,您已成功连接到服务器(这可能是您自己未制作的服务器)。

几天前在一台公司计算机上遇到了完全相同的情况,并搜索了数小时

检查您的防病毒软件,一些防病毒软件(如
E***N**32
)使用实时TCP扫描,即使目标端口上没有任何内容正在侦听,也会使连接成功,但稍后当您尝试从套接字读/写时,会将其重置

将此添加到您的代码中:

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

如果你现在有一个SoCutExtExchange,你应该考虑改变你的防病毒。

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


我建议您禁用杀毒软件,但在某些情况下,即使这样也无助于卸载损坏的实时TCP扫描驱动程序…

新套接字(…)
肯定不会返回
true
。如果它没有抛出异常,它将返回一个新的
Socket
对象。所以没有服务器在运行。奇怪?如果您使用的是本地IP,它可能会将其用作您的服务器。在没有运行服务器的情况下获取连接?更准确地说,在这种特定情况下,您将获得一个
ConnectException
(它是
IOException
的子类)。最好测试该错误并向用户提供合理的错误消息。commSocket.getInputStream().write(0);不起作用。我找不到写入方法。超级!我刚刚将我的防病毒软件切换到游戏模式,现在它可以正常工作了!好提示@ikurtz在输出流上使用write,在输入流上使用read.:-)