Я работаю над передачей файла между двумя компьютерами через сокет. Кажется, все работает, но когда я смотрю на содержимое найденного файла, он пуст. Что я делаю не так?
Вот мой код на стороне сервера. Файл foobar.txt существует, и его содержимое - «Привет, мир!».
try{
ServerSocket ssock = new ServerSocket(12345);
Socket sock = ssock.accept();
//here I get the filename from the client, but that works fine.
File myFile = new File("foobar.txt");
byte[] mybytearray = new byte[(int) myFile.length()];
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(myFile));
bis.read(mybytearray, 0, mybytearray.length);
OutputStream os = sock.getOutputStream();
os.write(mybytearray, 0, mybytearray.length);
os.flush();
sock.close();
} catch (Exception e){
e.printStackTrace();
}
А вот мой код клиента:
try {
Socket socket = new Socket(host, port);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.print("get foobar.txt\r\n");
out.flush();
byte[] streamIn = new byte[1024];
InputStream in = socket.getInputStream();
FileOutputStream file_src = new FileOutputStream("foobar.txt");
BufferedOutputStream file_writer = new BufferedOutputStream(file_src);
int i;
while ((i = in.read()) != -1) {
file_writer.write(i);
}
file_writer.flush();
file_writer.close();
file_src.close();
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
решаемые
Поскольку я использую несколько потоков и несколько сокетов и тестирую все соединения на одном компьютере, я просто столкнулся с проблемой, когда клиент (в котором есть и код клиента, и серверный код) будет соединяться с самим собой, а не с другим клиент. Изменение порта передачи файлов для разных работающих клиентов заставило все это работать. Спасибо всем, кто взглянул на это и дал мне несколько советов.