【发布时间】:2019-05-25 00:33:28
【问题描述】:
使用我的 java 程序通过套接字发送大型文本文档或其他文件没有问题,但是当我尝试发送 .jpg 文件或其他图像时,我得到 java.net.SocketException: Connection reset。
通过套接字发送 229 KB 文本文档时我没有遇到任何问题,但是当我尝试发送 89 KB 图像时,我得到了错误。我使用 while 循环来读取和写入文件。
这是有问题的服务器类的一部分(名为 EasyDataSend):
public EasyDataSend() throws IOException
{
port = 8080;
server = new ServerSocket(port);
socket = server.accept();
dataOutputStream = new DataOutputStream(socket.getOutputStream());
}
public void sendFile(String path) throws IOException
{
File file = new File(path);
InputStream fileInputStream = new FileInputStream(file);
OutputStream fileOutputStream = socket.getOutputStream();
byte[] bytes = new byte[16 * 1024];
int count;
while ((count = fileInputStream.read(bytes)) > 0)
{
fileOutputStream.write(bytes, 0, count);
}
fileOutputStream.close();
fileInputStream.close();
socket.close();
server.close();
}
这是客户端类的一部分(名称为 EasyDataReceive):
public EasyDataReceive() throws UnknownHostException, IOException
{
ip = "127.0.0.1";
port = 8080;
socket = new Socket(ip,port);
}
public void receiveFile(String path) throws IOException, SocketException
{
File file = new File(path);
InputStream fileInputStream = socket.getInputStream();
OutputStream fileOutputStream = new FileOutputStream(file);
byte[] bytes = new byte[16*1024];
int count;
while ((count = fileInputStream.read(bytes)) > 0)
{
fileOutputStream.write(bytes, 0, count);
}
fileOutputStream.close();
fileInputStream.close();
socket.close();
}
这是我得到的错误:
线程“主”java.net.SocketException 中的异常:连接重置 在 java.net.SocketInputStream.read(未知来源) 在 java.net.SocketInputStream.read(未知来源) 在 java.net.SocketInputStream.read(未知来源) 在 EasyDataReceive.receiveFile(EasyDataReceive.java:111) 在 TesterClient.main(TesterClient.java:23)
此外,第 111 行实际上只是客户端类中 while 循环的开始。我不想将整个班级粘贴到帖子中。第 23 行只是我构建 EasyDataReceive 对象的测试类的一部分。
【问题讨论】: