ftp 下载文件时出现错误!

akucindaim 2008-09-04 11:13:41
package socket.FTP;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 服务器端
* @author lake
*
*/
public class Server {
int port = 21;

void start() {
Socket s = null;
try {
ServerSocket ss = new ServerSocket(port);
while (true) {
// 选择进行传输的文件
String filePath = "E:\\ftp.txt";
File fi = new File(filePath);

System.out.println("文件长度:" + (int) fi.length());

// public Socket accept() throws
// IOException侦听并接受到此套接字的连接。此方法在进行连接之前一直阻塞。

s = ss.accept();
System.out.println("建立socket链接");
DataInputStream dis = new DataInputStream(
new BufferedInputStream(s.getInputStream()));
dis.readByte();

DataInputStream fis = new DataInputStream(
new BufferedInputStream(new FileInputStream(filePath)));
DataOutputStream ps = new DataOutputStream(s.getOutputStream());
//将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名的处理,还需要加工。
ps.writeUTF(fi.getName());
ps.flush();
ps.writeLong((long) fi.length());
ps.flush();

int bufferSize = 8192;
byte[] buf = new byte[bufferSize];

while (true) {
int read = 0;
if (fis != null) {
read = fis.read(buf);
}

if (read == -1) {
break;
}
ps.write(buf, 0, read);
}
ps.flush();
// 注意关闭socket链接哦,不然客户端会等待server的数据过来,
// 直到socket超时,导致数据不完整。
fis.close();
s.close();
System.out.println("文件传输完成");
}

} catch (Exception e) {
e.printStackTrace();
}
}

public static void main(String arg[]) {
new Server().start();
}
}

显示错误为:
java.net.BindException: Address already in use: JVM_Bind
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.PlainSocketImpl.bind(Unknown Source)
at java.net.ServerSocket.bind(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at java.net.ServerSocket.<init>(Unknown Source)
at socket.FTP.Server.start(Server.java:20)
at socket.FTP.Server.main(Server.java:74)
...全文
259 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
akucindaim 2008-09-04
  • 打赏
  • 举报
回复
呵呵,我知道怎么回事了,谢谢大家
csgdseed 2008-09-04
  • 打赏
  • 举报
回复
int port = 21;
换个6000以上的试试
akucindaim 2008-09-04
  • 打赏
  • 举报
回复
可是FTP默认的端口号不就是21吗.怎么换
相静如滨 2008-09-04
  • 打赏
  • 举报
回复
java 虚拟机被占用了 换个端口试下
csgdseed 2008-09-04
  • 打赏
  • 举报
回复
Address already in use: JVM_Bind
IP地址被占用了
程序中bind的地址是什么?
akucindaim 2008-09-04
  • 打赏
  • 举报
回复
我没有用TOMCAT服务器
  • 打赏
  • 举报
回复
停止webserver
删除缓冲
重新启动tomcat
akucindaim 2008-09-04
  • 打赏
  • 举报
回复
???不懂
caili314 2008-09-04
  • 打赏
  • 举报
回复
在运行此程序前, 端口21是否被其它的程序(如FTP服务)占用?

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧