读书人

服务器连接顺利、只是服务器端不接收文

发布时间: 2011-11-06 07:07:53 作者: rapoo

服务器连接成功、只是服务器端不接收文件内容、一直等待Socket dataSocket = serverDataSocket.accept();
package test;

import java.io.*;
import java.net.*;

public class HelloWordFTP {
private static final int CTRLPORT = 21;
private static Socket ctrlSocket;
private static PrintWriter ctrlOutput;
private static BufferedReader ctrlInput;
private static byte[] localHostAddress;

public static void main(String[] args) {
try {
String host = "10.36.254.27 ";
String loginName = "eptftp ";
String password = "ept ";
String dirName = "/Inetpub/ftproot/userhome/Localuser/eptftp ";
String fileName = "C:\\temp\\Seikyusyo.txt ";


ctrlSocket = new Socket(host, CTRLPORT);
System.out.println( "dd ");
localHostAddress = ctrlSocket.getLocalAddress().getAddress();
ctrlOutput = new PrintWriter(ctrlSocket.getOutputStream());
ctrlInput = new
BufferedReader(new InputStreamReader(ctrlSocket.getInputStream()));

ctrlOutput.println( "USER " + loginName);
ctrlOutput.flush();
ctrlOutput.println( "PASS " + password);
ctrlOutput.flush();

ctrlOutput.println( "CWD " + dirName);
ctrlOutput.flush();
ctrlOutput.println( "TYPE I ");
ctrlOutput.flush();
System.out.println( "write begin ");

FileInputStream fis = new FileInputStream(fileName);
Socket dataSocket = dataConnection( "STOR " + fileName);
OutputStream outstr = dataSocket.getOutputStream();
int n;
byte[] buff = new byte[1024];


while ((n = fis.read(buff)) > 0) {
outstr.write(buff,0,n);


System.out.println(n);
}
dataSocket.close();
fis.close();
System.out.println( "write end ");


ctrlOutput.close();
ctrlInput.close();
ctrlSocket.close();
}catch (Exception e) {
e.printStackTrace();
}
}

private static Socket dataConnection(String ctrlcmd)
throws IOException,UnknownHostException {
String cmd = "PORT ";
ServerSocket serverDataSocket = new ServerSocket(0,1);
for (int i=0;i <4;i++) {
cmd = cmd + (localHostAddress[i] & 0xff) + ", ";
}
cmd = cmd + (((serverDataSocket.getLocalPort())/256) & 0xff)
+ ", "
+ (serverDataSocket.getLocalPort() & 0xff);

ctrlOutput.println(cmd);
ctrlOutput.flush();
ctrlOutput.println(ctrlcmd);
ctrlOutput.flush();

Socket dataSocket = serverDataSocket.accept();
serverDataSocket.close();
return dataSocket;

}
}

[解决办法]
Socket类继承线程类。
[解决办法]
你的数据发送到21端口,你的服务器端在哪监听呢??

ServerSocket serverDataSocket = new ServerSocket(0,1); //????

读书人网 >J2SE开发

热点推荐