#java #сокет #cpp #linux
Пишу код на Java, код прикреплю ниже, там же комментарии в местах, где зависает соединение. По документации в c =in.read(buffer); должно лежать -1 при завершении передачи. Сервер завершает передачу файла и запускает поток на чтение, но клиент упорно ждет данных. Клиент на java. import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; public class foto_url { public static void main(String args[]) throws IOException {int serverPort = 5000; // здесь обязательно нужно указать порт к которому привязывается сервер. String address = "54.228.232.96"; InetAddress ipAddress = InetAddress.getByName(address); // создаем объект который отображает вышеописанный IP-адрес Socket socket = new Socket(ipAddress, serverPort); // создаем сокет используя IP-адрес и порт сервера. // Берем входной и выходной потоки сокета,теперь можем получать и отсылать данные клиентом. OutputStream out = socket.getOutputStream(); InputStream in = socket.getInputStream(); System.out.println("download"); downloadFiles(in,"new11", 1024); System.out.println("upload"); uploadFiles(out,"new11", 1024); System.out.println("download"); downloadFiles(in,"zzx", 1024); socket.close(); } public static void downloadFiles(InputStream in,String strPath, int buffSize) { try { // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения. OutputStream writer = new FileOutputStream(strPath); byte buffer[] = new byte[buffSize]; int c = in.read(buffer); while (c > 0) { writer.write(buffer, 0, c); //c= in.available(); //При таком варианте тоже зависает // in.read(buffer); c =in.read(buffer);//В этом месте зависает. System.out.println("c="+c); } writer.flush(); writer.close(); } catch (IOException e) { System.out.println(e); } } public static void uploadFiles(OutputStream out,String strPath, int buffSize) { try { // Конвертируем потоки в другой тип, чтоб легче обрабатывать текстовые сообщения. InputStream read = new FileInputStream(strPath); byte buffer[] = new byte[buffSize]; int c = read.read(buffer); while (c>0) { out.write(buffer); c =read.read(buffer); } out.flush(); read.close(); } catch (IOException e) { System.out.println(e); } } } сервер на с++ под линукс. #include#include #include #include #include #include #include #include #include #include #include #include #include #include
Комментариев нет:
Отправить комментарий