微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java TCP Server读取文件名

如何解决Java TCP Server读取文件名

| 我想创建小型客户端-服务器TCP文件传输程序。我有一件事有问题。当我从客户端向服务器发送文件时,例如txt文件: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,mybytearray.length);
        OutputStream os = sock.getoutputStream();
        System.out.println(\"Wait...\");
        os.write(mybytearray,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,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,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);
...但很幸运,我一直在为客户提供“等待...”     

解决方法

        TCP只是传输原始数据。如果要发送带有文件名的文件,则可能需要使用更高级别的协议,例如FTP或TFTP。 如果您确实要使用纯TCP,则需要以某种方式对消息中的文件名进行编码。例如,您可以将文件名作为消息的第一行发送,然后让另一端将消息的其余部分转换为具有该名称的文件。 这可能对您有帮助:http://www.adp-gmbh.ch/blog/2004/november/15.html     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。