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