У меня есть домашнее задание для создания простого механизма передачи данных с помощью пары сокетов TCP/IP клиента путем перенаправления стандартного ввода-вывода. Я действительно работаю, но когда я пытаюсь передать большие файлы (скажем, ~ 5 г), скорость резко замедляется. Я использую BufferedInputStream и BufferedOutputStream, и я думаю, что, возможно, есть какая-то оптимизация, которую я могу сделать. Код для моего сервера:Увеличение скорости передачи данных на простом TCP-клиенте/сокете
private static final int BUF_SIZE = 2047;
public static void main(String[] args) throws IOException{
/*
* Attempt to parse command line arguments.
* @require args[0] is an int
*/
int port = 0;
try {
port = Integer.parseInt(args[0]);
} catch(NumberFormatException e) {
System.err.println("Port must be an integer in range 0 - 65535.");
System.exit(-1);
}
/*
* Bind server socket to specified port number and wait for request.
* @require port >= 0 && port <= 65535
*/
ServerSocket welcomeSocket = null;
welcomeSocket = new ServerSocket(port);
System.out.println("Now listening on port: " + port);
/*
* Accept connection from client socket.
*/
Socket connectionSocket = null;
connectionSocket = welcomeSocket.accept();
System.out.println("Client made connection");
BufferedInputStream input;
BufferedOutputStream output;
if(System.in.available() > 0) {
input = new BufferedInputStream(System.in, BUF_SIZE);
output = new BufferedOutputStream(
connectionSocket.getOutputStream(), BUF_SIZE);
} else {
input = new BufferedInputStream(
connectionSocket.getInputStream(), BUF_SIZE);
output = new BufferedOutputStream(System.out, BUF_SIZE);
}
int place;
while((place = input.read()) != -1)
output.write(place);
input.close();
output.close();
welcomeSocket.close();
connectionSocket.close();
}
Клиентский код по существу тот же. Я пробовал использовать разные размеры буфера, в том числе по умолчанию (не указывая размер буфера), но все они работают примерно с одинаковой скоростью. Любые указатели на то, как я могу увеличить свою производительность?
Благодарим вас за внимание!
ли передача фактически замедлиться с большой файлы, или скорость становится более заметной при их передаче? Вы можете столкнуться с лимитом своего оборудования - файлы размером 5 ГБ обычно не передаются очень быстро в любой сети. –
Это хороший вопрос, который я не рассматривал. Есть ли команда при использовании cmd для определения фактической скорости передачи? –
Я думаю, что *, но все они работают примерно с той же скоростью *. Можете ли вы дать нам некоторое представление об относительной скорости передачи и замедлении, которое вы получаете? Это немного сложнее, чем «почему это замедляется для больших файлов?» Вероятно, это не ваш код в корне замедления. –