2015-09-15 44 views
1

每次建立ftp连接时,我都想要一个java程序来触发。如何监视正在用于FTP服务的网络端口?

我不知道如何检查FTP连接。有没有办法监视端口,以便我可以确认何时FTP获得新的连接?

我研究了一下,发现FTPClient类基本上表明我需要做我自己的ftpclient,但我想知道是否有另一种方法。

即使是外部程序也可以作为选项。

+0

你想Java程序运行在客户端还是服务器端?它会做什么? (根据它将做什么,可能有其他选项) –

+0

它将在服务器端运行,基本上该程序将读取客户端上的文件。 –

+0

什么是您的FTP服务器? –

回答

0

有多种方法:

  • 有FTP服务本身启动Java应用程序(音昂贵的)或通知正在运行的Java应用程序/服务。这将是最简单的方法...

  • 使用某种外部监测;例如

    • 一个通用分组分组嗅探工具(如wiresharktcpdump)可能能够触发一个外部应用程序。如果没有,您可能可以将其记录到您扫描连接事件的文件中。

    • 你可以使用JPCAP做自己的包在Java中

    • 有一个名为tcpspy Linux的工具,记录TCP/IP连接的详细信息到syslog嗅探可能实现的东西。您可以将其配置为记录到特定文件并监视该文件,或者,您可以修改tcpspy以直接启动或通知Java应用程序。

+0

通知正在运行的Java服务正是我想要做的,但是当FTP服务获得新连接时,我通知我的服务部分出现问题。 数据包嗅探选项似乎很好我会研究它 –

0

它会在服务器端运行,基本程序会读取客户端穿上它的文件。

考虑使用文件观察器。似乎并不是你真的在意使用FTP来获取文件(事实上,将来它可能会通过其他方式达到目的),但只是该文件存在并需要处理。

请参阅Watching a Directory for Changes了解如何编写一个的详细信息。

+0

实际上FTP是很重要的文件,因为它是唯一的方法,文件来自大型机,并且允许传输文件的唯一方法是FTP(公司规则)。文件观察器是一个选项,但它不能达到我想要的问题。 –

0

我有一个程序,用java做类似的任务服务器端。它检查文件夹中是否存在文件,如果有,则启动剩余的代码。像这样:

public static boolean needToConvert(){ 
    //get list of companies 
    List<String> companies = getCompanyNames(); 
    //check whether a file exists in folder of company 
    for(String company: companies){ 
     if (new File(INPUT_LOCATION + company).list().length > 0){ 
      return true; 
     } 
    } 
    return false; 
} 

这是一个相当昂贵的任务,所以你可以将服务器设置为“检查”。说,每分钟左右。

+0

好的建议,我正在考虑它,但我宁愿在FTP服务完成后立即开始阅读文件以放置文件。 –

+0

这听起来像你做的任何一种方式,你会花费资源不断地以某种方式监听,无论是检查ftp连接还是寻找新文件。我每3秒检查一次,并在捕获新文件后立即进行处理。它在处理后存档并且程序再次开始检查。祝你好运! – PoorBob