gpt4 book ai didi

java - 服务器套接字文件传输

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:15:44 25 4
gpt4 key购买 nike

我在 java 中使用服务器套接字概念来传输图像和视频等文件。但是当我在客户端接收时,我正在自定义文件名。我可以直接获取文件的原始名称吗?

例如:

如果从服务器端传输的文件是“abc.txt”,我需要在客户端反射(reflect)这个相同的名称(不单独传递名称)。

在服务器端:

public class FileServer {
public static void main (String [] args ) throws Exception {
// create socket
ServerSocket servsock = new ServerSocket(13267);
while (true) {
System.out.println("Waiting...");

Socket sock = servsock.accept();
System.out.println("Accepted connection : " + sock);
OutputStream os = sock.getOutputStream();
new FileServer().send(os);
sock.close();
}
}

public void send(OutputStream os) throws Exception{
// sendfile
File myFile = new File ("C:\\User\\Documents\\abc.png");
byte [] mybytearray = new byte [(int)myFile.length()+1];
FileInputStream fis = new FileInputStream(myFile);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.read(mybytearray,0,mybytearray.length);
System.out.println("Sending...");
os.write(mybytearray,0,mybytearray.length);
os.flush();
}
}

在客户端:

    public class FileClient{
public static void main (String [] args ) throws Exception {


long start = System.currentTimeMillis();


// localhost for testing
Socket sock = new Socket("127.0.0.1",13267);
System.out.println("Connecting...");
InputStream is = sock.getInputStream();
// receive file
new FileClient().receiveFile(is);
long end = System.currentTimeMillis();
System.out.println(end-start);

sock.close();
}

public void receiveFile(InputStream is) throws Exception{
int filesize=6022386;
int bytesRead;
int current = 0;
byte [] mybytearray = new byte [filesize];

FileOutputStream fos = new FileOutputStream("def");
BufferedOutputStream bos = new BufferedOutputStream(fos);
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);

bos.write(mybytearray, 0 , current);
bos.flush();
bos.close();
}
}

最佳答案

为了让接收方知道文件名,可以:

a) 它必须假设它知道这个名字,因为它要求它,

b) 服务器首先将名称作为流的一部分发送。

如果您发明了一种无需实际发送即可发送信息的方法,请告诉我,我们就能成为亿万富翁。我们可以称之为“计算机心灵感应”。

关于java - 服务器套接字文件传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7696358/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com