Macos Ant套接字任务在mac上不工作
我在build.xml上获得了以下内容Macos Ant套接字任务在mac上不工作,macos,sockets,tomcat,ant,Macos,Sockets,Tomcat,Ant,我在build.xml上获得了以下内容 <target name="check-port" description="Check whether Tomcat is running"> <condition property="tomcat.running"> <socket server="localhost" port="8080"/> </condition> </target> 它突然停止
<target name="check-port" description="Check whether Tomcat is running">
<condition property="tomcat.running">
<socket server="localhost" port="8080"/>
</condition>
</target>
它突然停止在mac上工作,在windows上工作正常,但在mac上,即使我在本地主机8080上没有运行任何东西,它也显示为真
我不知道为什么会发生这种情况,或者为什么它在windows上工作。它曾经在mac上工作过
我正在测试OSX优胜美地版本10.10.2
这可能与什么有关?如何修复它?我要做的第一件事是通过编译和运行以下代码来模拟ant
条件代码的行为:
import java.net.Socket;
import java.io.IOException;
public class Test {
public static void main(String args[]) {
try {
Socket socket = new Socket("localhost", 8080);
} catch (IOException e) {
System.out.println("down");
System.exit(0);
}
System.out.println("up");
}
}
如果在Tomcat未运行时输出
up
,那么您在java
和lsof
之间就什么是“upness”存在根本性的分歧,需要进行调查
查看是否确实存在某些内容的一种方法是尝试连接到它,例如:
telnet localhost 8080
如果这样的话,我通常会尝试lsof
,看看哪个进程得到了它,但正如您所说的,这似乎不起作用。可能是一种不同的工具,如:
netstat -na | grep ':8080 '
我会成功的
如果它输出
down
,则您会遇到不同的问题,可能是ant
中存在问题,也可能是您的构建过程本身启动服务器(或其他服务器)。这也需要进一步调查,但你至少已经缩小了问题的范围
您可以尝试的一件事是在构建过程中运行Java代码,查看它的想法,同时ant
告诉您服务器在那里。我发现了问题
ESET antivirus似乎正在本地主机8080上启动一个进程调用“esets\U proxy”,但有趣的是,它在lsof
或netstat
中不可见。奇怪的是,当我在8080上启动一只野蝇时,它变得清晰可见。但只有当野蝇在奔跑时,我把它关掉后,它才会停止显示。我删除了ESET和ant套接字任务停止,显示端口8080正在使用中
谢谢@paxdiablo你的帮助真的很有用 我在OS X上的卡巴斯基反病毒软件也遇到了同样的问题,它在本地主机8080上启动了一个不可见的进程(没有netstat)。请原谅这个假设,但是你怎么知道没有人在监听这个端口呢?
sudo lsof-I-p | grep 8080
同样,当我手动启动tomcat时,它不会抱怨FSG77,那很有趣。我已经尽我所能给出了答案,但我认为这可能需要一些深入的调查。尽管如此,希望答案能让你更清楚地指出问题所在。它正在向上显示
。。。但是我可以启动tomcat而不必对端口有任何抱怨8080@afsg77,请参阅Trytelnet
上的更新-不确定OSX可能会拉什么诡计,但实际上可能存在服务器事件,尽管您已关闭Tomcat。它正在连接,但已关闭<代码>测试仪$telnet本地主机8080正在尝试::1。。。已连接到本地主机。转义字符为“^]”。连接已被外部主机关闭。如何查看使用该端口的是什么?嗯,lsof
似乎是该作业的工具:-)但是,由于这正是您所关心的,我添加了一个netstat
变体。您还可以尝试lsof-i:8080-P
。