【发布时间】:2014-11-25 01:59:04
【问题描述】:
我是一个新手,我想完成从服务器到客户端的文件传输“用它做点什么”,然后将文件发送回服务器。我使用的最基本的代码在这里:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Main {
public static void main(String[] args) throws IOException {
ServerSocket servsock = new ServerSocket(123456);
File myFile = new File("s.pdf");
while (true) {
Socket sock = servsock.accept();
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();
}
}
}
The client module
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.Socket;
public class Main {
public static void main(String[] argv) throws Exception {
Socket sock = new Socket("127.0.0.1", 123456);
byte[] mybytearray = new byte[1024];
InputStream is = sock.getInputStream();
FileOutputStream fos = new FileOutputStream("s.pdf");
BufferedOutputStream bos = new BufferedOutputStream(fos);
int bytesRead = is.read(mybytearray, 0, mybytearray.length);
bos.write(mybytearray, 0, bytesRead);
bos.close();
sock.close();
}
}
从这个网站得到它:http://www.java2s.com/Code/Java/Network-Protocol/TransferafileviaSocket.htm
我了解这是如何工作的,但我不知道如何将文件发送回服务器。 请帮忙。
【问题讨论】:
-
套接字是双向的。保持打开状态并从服务器读取响应。
-
我建议你使用 HTTP 并且你的“服务器”是一个简单的 servlet。然后您只需阅读请求并回答响应,servlet API 会为您完成其余的工作(在客户端上由 HTTPURLConnection 或其他 HTTPClient 代码)。
-
@jtahlborn 那么我是否要省略服务器和客户端上的 sock.close() ,然后添加写入和读取数据的反向链?
-
@eckes 感谢您的建议,但您认为不使用 HTTP 可以解决这个问题吗?
-
@meowtwo 确定是的。在刚刚打开的服务器上是 = socket.getInputStream() 和 os = socket.getOutputStream()。从一个读取,写入另一个。它只是在生产中需要很多额外的东西才能使其可靠。
标签: java sockets client server