您好,我正在尝试做一个小型客户端文件服务器应用程序,其中可以传输任何类型的文件,包括(.txt、.JPEG、.docx、.mp3 和 .wma)。到目前为止,我只能随机进行转移。大多数情况下,文件不会被传输;只有图像打印在客户端路径上。
在我看来,文件卡在 do while 循环中。请帮我解决这个问题。
服务器部分:
// create socket
ServerSocket serversock = new ServerSocket(444);
while (true) {
System.out.println("Waiting for client to connect...");
Socket welcomesock = serversock.accept();
System.out.println("Client has connected from: " + welcomesock.getInetAddress().getHostAddress());
File myFile = new File ("C:\\temp\\New Stories.wma");
if(!myFile.exists()){
System.out.println("Filename does not exist");
welcomesock.close();
}
else{
byte [] mybytearray = new byte [(int)myFile.length()];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
OutputStream os = welcomesock.getOutputStream();
System.out.println("Sending file");
os.write(mybytearray,0,mybytearray.length);
os.flush();
os.close();
}
}</i>
客户端部分:
而(真){
int bytesRead;
int currentlength = 0;
int fsize=6022386; // filesize temporary hardcoded
long start = System.currentTimeMillis();
// Creates the Client socket and binds to the server
Socket clientSocket = null;
try {
clientSocket = new Socket(127.0.0.1, 444);
} catch (UnknownHostException e) {
e.printStackTrace();
}
byte [] bytearray = new byte [fsize];
InputStream is = clientSocket.getInputStream();
FileOutputStream fos = new FileOutputStream("D:\\New Stories.wma");
BufferedOutputStream bos = new BufferedOutputStream(fos);
bytesRead = is.read(bytearray,0,bytearray.length);
currentlength = bytesRead;
do {
bytesRead = is.read(bytearray, currentlength, (bytearray.length-currentlength));
if(bytesRead >= 0) currentlength += bytesRead;
} while(bytesRead > -1);
bos.write(bytearray, 0 , currentlength);
bos.flush();
long end = System.currentTimeMillis();
System.out.println(end-start);
bos.close();
clientSocket.close();
}