我希望你能提供帮助。我是一个相当新的编程和我玩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());
}
}
非常感谢。
编辑:新的套接字(..,..);阻止不是吗?我认为在那种情况下,如果没有例外处理,那么我们有一个真正的连接?
编辑:我玩过反病毒,现在它正在运行!答案 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
。显然你已成功连接到服务器(这可能是你自己没有制作的)。