FileInputStream in = (FileInputStream) socket.getInputStream();下载到本地
时间: 2023-10-25 14:25:21 浏览: 64
你可以通过以下方式将从 socket 获取到的数据写入本地文件:
```java
try {
InputStream in = socket.getInputStream();
FileOutputStream out = new FileOutputStream("path/to/local/file");
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
```
这段代码会从 socket 获取输入流,然后将数据写入本地文件。你需要将 "path/to/local/file" 替换成你想要保存文件的路径。
相关问题
FileInputStream in = (FileInputStream) socket.getInputStream();下载到本地 报错Connection reset
这个错误通常是由于网络连接被重置(reset)导致的。这可能是由于网络故障、防火墙问题或其他原因引起的。
为了解决这个问题,你可以尝试以下几个方法:
1. 检查网络连接是否正常。你可以尝试 ping 目标服务器,看看是否能够正常连接。
2. 检查防火墙设置。如果你使用了防火墙,可能需要在防火墙中开放相应的端口。
3. 调整代码。你可以尝试增加一些异常处理机制,例如捕获 IOException 异常并重试下载操作。
4. 调整下载方式。你可以尝试使用其他方式进行下载,例如使用 HttpClient 等第三方库。
希望这些方法能够帮助你解决问题。
java.net.SocketException: Connection reset at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323) at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350) at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803) at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966) at java.base/java.io.InputStream.read(InputStream.java:218) at SSocket/com.cuc.socketfile.FileClinet.<init>(FileClinet.java:19) at SSocket/com.cuc.socketfile.FileClinet.main(FileClinet.java:40)网络没问题但就是连接出错会不会是代码问题以下第一个是我的服务器代码,第二个是我的客户端代码package com.cuc.socketfile; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class FileServer { ServerSocket server; Socket socket; public FileServer() { FileInputStream file = null; try { server = new ServerSocket(6634); socket = server.accept(); OutputStream out = socket.getOutputStream(); file = new FileInputStream("src/s.txt"); byte buffer[] = new byte[1024]; int len = 0; while ((len=file.read(buffer)) != -1) { out.write(buffer, 0, len); out.flush(); } socket.shutdownInput(); } catch (IOException e) { e.printStackTrace(); }finally { if (file != null) { try { file.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } } public static void main(String[] args) { new FileServer(); } }客户端代码如下package com.cuc.socketfile; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; import java.net.UnknownHostException; public class FileClinet { Socket socket; public FileClinet() { FileOutputStream file = null; try { socket = new Socket("127.0.0.1", 6634); InputStream in = socket.getInputStream(); file = new FileOutputStream("5237.file"); byte buffer[] = new byte[1024]; int len = 0; while (((len = in.read(buffer)) != -1)) { file.write(buffer, 0, len); file.flush(); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if (file == null) { try { file.close(); socket.close(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } } } public static void main(String[] args) { new FileClinet(); } }
这个错误通常是因为连接被重置而导致的。这可能是由于客户端或服务器的网络或代码问题引起的。以下是一些可能导致此问题的常见原因:
1. 服务器关闭或崩溃
2. 客户端尝试与关闭的服务器建立连接
3. 网络连接中断
4. 客户端或服务器代码中的错误
在你的代码中,你应该检查以下几点:
1. 服务器是否在运行并且监听正确的端口(6634)?
2. 客户端是否正确地指定了服务器的 IP 地址和端口号?
3. 你的代码是否正确地处理异常情况,例如文件不存在或网络连接中断?
4. 你是否在正确的时间关闭输入和输出流?
如果你排除了这些可能的问题但仍然看到这个错误,你可能需要进一步调试你的代码或检查网络连接。
阅读全文