您好我正在尝试做一个小型客户端文件服务器应用程序,其中可以传输任何类型的文件,包括(.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>
客户端部分:
while(true){
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();
}
的
答案 0 :(得分:0)
您的服务器部分有一个无限循环:
while (true){
...
}
永远不会退出。您可能想要更改:
if(!myFile.exists()){
System.out.println("Filename does not exist");
welcomesock.close();
}
到
if(!myFile.exists()){
System.out.println("Filename does not exist");
welcomesock.close();
break;
}
当没有文件存在时,将退出循环。