2010-05-10 111 views
3

我希望你能帮上忙。我相当新的程序和进出口玩java套接字。Java Socket返回True

问题是下面的代码。由于某些原因,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()); 

    } 
} 

非常感谢。

编辑:new Socket(..,..);阻止不是吗?我认为在这种情况下,如果没有例外的处理,那么我们有一个真正的联系?

编辑:我玩过反病毒,现在它工作!

+2

'新的Socket(...)'** **肯定不返回'true'。它返回一个新的'Socket'对象,如果它没有抛出异常。 – 2010-05-10 12:56:23

回答

3

几天前在公司电脑上出现了与此相同的情况,并搜索了几个小时。

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

添加到您的代码:

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

如果你接收到一个SocketException现在,你真的应该考虑改变你的杀毒软件。

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

我建议你禁用防病毒,但在某些情况下甚至不帮助卸载他们破碎的生活TCP扫描驱动器...

+0

commSocket.getInputStream()。write(0);不起作用。我找不到写入方法。 – iTEgg 2010-05-10 13:16:27

+0

超级!我只是将我的防病毒软件更改为正常模式,现在它正在运行!伟大的提示! – iTEgg 2010-05-10 13:25:39

+1

@ikurtz在输出流上使用写入,并在输入流上读取。 :-) – corsiKa 2010-05-10 13:32:45

1

Socket constructor立即连接,如果不成功,将抛出IOException。所以显然你已经成功连接到一个服务器(这可能是你没有做的)。

+0

那么我在本地机器上使用本地IP进行测试。所以没有服务器在运行。奇怪的? – iTEgg 2010-05-10 13:06:14

+0

如果您使用的是本地IP,则可能将其用作您的服务器。 – 2010-05-10 13:06:48

+0

得到一个没有服务器运行的连接? – iTEgg 2010-05-10 13:09:40