Java 从服务器向客户端发送多张照片陷入了一个while循环

Java 从服务器向客户端发送多张照片陷入了一个while循环,java,sockets,server,client,Java,Sockets,Server,Client,我正在构建一个服务器/客户端应用程序,其中包括发送和保存有关照片的信息 我已成功地将一张照片从客户端一次发送到服务器。现在,我正试图让服务器向客户端发送多张照片 我使用了以前使用的代码,并将其放入for循环中。但是,当我运行代码时,客户端会卡在while循环中。特别奇怪的是,如果我要求服务器发送3张照片,客户端成功地接收到3张并正确地完成了前2个循环,包括while和for(我在控制台上看到了一些打印)。但是,它不会在最后一次迭代中退出而循环。我还注意到,如果关闭服务器,客户端就可以完成循环 我

我正在构建一个服务器/客户端应用程序,其中包括发送和保存有关照片的信息

我已成功地将一张照片从客户端一次发送到服务器。现在,我正试图让服务器向客户端发送多张照片

我使用了以前使用的代码,并将其放入for循环中。但是,当我运行代码时,客户端会卡在
while
循环中。特别奇怪的是,如果我要求服务器发送3张照片,客户端成功地接收到3张并正确地完成了前2个循环,包括while和for(我在控制台上看到了一些打印)。但是,它不会在最后一次迭代中退出
循环。我还注意到,如果关闭服务器,客户端就可以完成循环

我想知道为什么客户机在while循环的最后一次迭代中陷入困境,尽管它似乎正确地接收了全部图像(我可以打开它们)

我在服务器端使用的代码如下:


for(int i=0;i显示的方法不适用于多个文件。您需要指示一个文件的结束位置和下一个文件的开始位置。例如,首先发送文件数(以便接收方知道需要循环多少次),然后对于每个文件,在发送文件字节之前发送文件大小(这样接收方就知道何时停止读取文件并准备下一个文件)

尝试类似以下内容:

试试看{
超流写入(n);
对于(int i=0;i
试试看{
int n=in.ReadInt(n);
对于(int j=0;j
看起来很奇怪,您的客户机在
中读取
,直到文件结束,然后循环并继续从
中的
读取。是否有其他逻辑“重置”
中,我们在这里没有看到。或者换句话说,客户端如何知道第一个图像何时结束,第二个图像何时开始?@Erik你是对的,客户端没有收到任何有关图像结束位置的信息。我已经更新了它,以便客户端接收图像大小!但是,现在我抛出了异常。嗨!谢谢我试着这样做,在客户端的if(bytesRead=-1)中添加了以下代码:
抛出新的EOFEException(“错误”);
(尽管我不确定抛出什么异常).现在,客户端成功退出循环,但异常正在该位置引发。你知道为什么吗?别管它了!我刚刚修复了它!结果我将照片的数量发送到了错误的位置。非常感谢你的帮助!