所以我创建了一个与FTP和SQL服务器通信的程序。我在我的Windows机器上运行我的程序,一切正常。但是当我在我的Ubuntu VM上运行该程序时,它无法运行。我的代码如下:
try {
URL url = new URL(location);
System.out.println("Created url");
URLConnection urlc = url.openConnection();
System.out.println("Created URLConnection");
urlc.setDoOutput(true);
System.out.println("Set Output");
OutputStreamWriter out = new OutputStreamWriter(urlc.getOutputStream());
System.out.println("Created OutputStreamWriter");
System.out.println("Hello World.");
out.write(Var.pressed);
System.out.println("Wrote String");
out.close();
System.out.println("Closed OutputStreamWriter");
} catch (Exception ex) {
ex.printStackTrace();
}
程序在我的FTP上创建一个文件然后写入它。正在创建该文件但它是空的。 不会抛出任何错误我的程序会打印以下内容
然后什么都不做。它不会抛出错误,它不会崩溃,也不会停止。终端刚刚打开。我也试过运行.jar但没有任何反应。
好像问题是在这里创建的:
OutputStreamWriter out = new OutputStreamWriter(urlc.getOutputStream());
为什么没有写入文件?如果没有错误抛出我的程序有什么问题?
答案 0 :(得分:0)
确实会抛出错误,
从其他所有内容来看,我认为你的意思是不会抛出错误。无论如何,我的回答是假设。
首先,程序挂起或等待并且不会产生错误的原因有很多。有时,如果你等待足够长的时间,系统阈值将会通过,即使你的程序很乐意等待,它也会超时。其他时候系统也没有注意。错误条件有点像礼貌。
我建议您尝试使用Ubuntu ftp line命令建立连接,并将其与Windows进行比较。 FTP协议通过端口做一些不寻常的事情。连接在一个端口上打开,但数据传输连接切换到另一个端口。可以通过更改端口来防火墙,防止数据传输。这也创建了“被动”与“主动”FTP的客户端。
答案 1 :(得分:0)
您至少需要获取响应代码或输入流。否则甚至不会形成TCP连接。否则你不知道服务器是否接受了你的输入。
你的头衔非常不准确。显然你正在创建OutputStreamWriter。您的问题是没有发送任何内容。而且SQL标签简直无关紧要。
答案 2 :(得分:-1)
如果没有错误消息,几乎不可能弄清楚它失败的原因。但是有一些建议。
首先,尝试添加System.err.println("test")
这将证明输出日志不仅会捕获System.out AKA标准输出流,还会捕获标准错误流。
我认为,在此修复之后,ex.printStackTrace()
将可见。
否则:您没有指定填充location
字符串的方式。您确定,您对该目录有写入权限吗?
如果location为/tmp/foo/bar/myFile.txt
,请确保目录/ tmp / foo / bar / exists(mkdir / tmp / foo / bar /)并且文件可访问(触摸/tmp/foo/bar/myFile.txt)
如果两者都没有报告错误并且第一个建议没有出现任何错误,那么程序可能会锁定并等待来自外部的某些内容。目前很难说清楚。