Java TCP Server читает имя файла - PullRequest
0 голосов
/ 22 июня 2011

Я хочу создать небольшую клиент-серверную программу передачи файлов TCP.И у меня проблема с одной вещью.Когда я отправляю файл с клиента на сервер, например, в текстовый файл: omg.txt, я хочу, чтобы сервер прочитал имя входящего файла.

Итак - клиент отправляет файл omg.txt, сервер сообщает «Получен новый файл: omg.txt».Я пытался использовать BufferedReader (Сервер) и DataOutputStream (Клиент, потому что вы должны написать имя файла, чтобы отправить его), но это не сработало.

РЕДАКТИРОВАТЬ:

Клиент:

Socket sock = new Socket("localhost",13267);
System.out.println("Wait...");
Scanner input = new Scanner(System.in);

while(true){
// wysylanie
System.out.println("Filename");
String p = input.nextLine();
File myFile = new File (p);
boolean exists = (new File(p)).exists();
if (exists) {
        byte [] mybytearray  = new byte [(int)myFile.length()];
        FileInputStream fis = new FileInputStream(myFile);
        BufferedInputStream bis = new BufferedInputStream(fis);
        BufferedOutputStream out = new BufferedOutputStream(sock.getOutputStream());
        bis.read(mybytearray,0,mybytearray.length);
        OutputStream os = sock.getOutputStream();
        System.out.println("Wait...");
        os.write(mybytearray,0,mybytearray.length);
        os.flush();
        System.out.println("Done");
        sock.close();
    } 

Сервер:

int filesize=6022386;
int bytesRead;
int current = 0;

ServerSocket servsock = new ServerSocket(13267);
Scanner input = new Scanner(System.in);


while (true) {
System.out.println("Wait...");
Socket sock = servsock.accept();
System.out.println("OK : " + sock);

// odbior pliku
byte [] mybytearray  = new byte [filesize];
InputStream is = sock.getInputStream();
bytesRead = is.read(mybytearray,0,mybytearray.length);
current = bytesRead;
do {
   bytesRead =
      is.read(mybytearray, current, (mybytearray.length-current));
   if(bytesRead >= 0) current += bytesRead;
} while(bytesRead > -1);

System.out.println("New filename");
String p = input.nextLine();
File plik = new File(p);
FileOutputStream fos = new FileOutputStream(plik);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(mybytearray, 0 , current);
bos.flush();

System.out.println("File saved");
bos.close();
sock.close();

И я попытался сделать что-то подобное:

Клиентский аддон:

DataOutputStream outToServer = new DataOutputStream(sock.getOutputStream());

sentence = input.nextLine();
outToServer.writeBytes(sentence);

Серверный аддон:

BufferedReader inFromClient = new BufferedReader(new InputStreamReader(sock.getInputStream()));

clientSentence = inFromClient.readLine();
System.out.println(clientSentence);

... но, к сожалению, у меня все время "Wait .." для клиента

1 Ответ

2 голосов
/ 22 июня 2011

TCP просто передает необработанные данные.Если вы хотите отправлять файлы с именем файла, вы можете использовать протокол более высокого уровня, такой как FTP или TFTP.

Если вы действительно хотите использовать обычный TCP, вам нужно кодировать имя файла вваше сообщение как-то.Например, вы можете отправить имя файла в качестве первой строки сообщения, а затем на другом конце превратить оставшуюся часть сообщения в файл с таким именем.

Это может быть полезно для вас: http://www.adp -gmbh.ch / блог / 2004 / ноябрь / 15.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...