Java:使用套接字从客户端向服务器发送多个图像文件

Java:使用套接字从客户端向服务器发送多个图像文件,java,sockets,file-io,Java,Sockets,File Io,我想从客户端向服务器发送多个图像文件。为此,我在应用程序中编写了代码,但它只发送一个图像。 在客户端应用程序中有一个框架,在服务器应用程序中也有一个启动/停止服务器的框架 还有一个问题是,当客户端应用程序发送图像文件时,服务器计算机上会显示此图像文件,但当我尝试打开此图像文件时,却什么也没有,但当我关闭服务器应用程序(服务器框架)时,我可以看到该图像 代码: 客户站点: public void sendPhotoToServer(String str){ // str is image loca

我想从客户端向服务器发送多个图像文件。为此,我在应用程序中编写了代码,但它只发送一个图像。 在客户端应用程序中有一个框架,在服务器应用程序中也有一个启动/停止服务器的框架

还有一个问题是,当客户端应用程序发送图像文件时,服务器计算机上会显示此图像文件,但当我尝试打开此图像文件时,却什么也没有,但当我关闭服务器应用程序(服务器框架)时,我可以看到该图像

代码:

客户站点:

public void sendPhotoToServer(String str){ // str is image location
    try {
        InputStream input = new FileInputStream(str);
        byte[] buffer=new byte[1024];
        int readData;
        while((readData=input.read(buffer))!=-1){
        dos.write(buffer,0,readData); // dos is DataOutputStream
        }
    } catch (FileNotFoundException e) {

    } catch (IOException e) {

    }       
}
在服务器端,此代码正在线程中运行:

public void run() {
while (true) {
            try {
                byte[] buffer = new byte[8192];
                fis = new FileOutputStream("C:\\"+(s1++)+".jpg"); // fis is FileOutputStream
                while ((count = in.read(buffer)) > 0){ //count is a integer and 'in' is InputStream
                fis.write(buffer, 0, count); 
                fis.flush();    
                }
                } catch (Exception e) {}
}
}
问题:

  • 只有客户端发送的第一个映像正在复制
  • 我只有在关闭服务器应用程序时才能看到此图像
  • 没有例外,我连续调用另一个类中的sendPhotoToServer方法,将所有图像文件作为以下格式发送:

    if (photoSourcePath != null) {
                                clientClass.sendPhotoToServer(photoSourcePath+"\\"+rowData.get(5));
                            }
    

    服务器端应该在线程完成任务后停止线程。
    while
    循环始终保持运行,并保持流打开(这就是为什么当您关闭服务器时会看到映像,此时线程才会停止)

    尝试将服务器端更改为:

    public void run() {
        boolean processing = true;
        while (processing) {
            try {
                byte[] buffer = new byte[8192];
                fis = new FileOutputStream("C:\\" + (s1++) + ".jpg"); // fis is
                                                                      // FileOutputStream
                while ((count = in.read(buffer)) > 0) { // count is a integer
                                                        // and 'in' is
                                                        // InputStream
                    fis.write(buffer, 0, count);
                    fis.flush();
    
                }
                processing = false;
            } catch (Exception e) {
                processing = false;
            }
        }
    }
    

    你有例外吗?在其他java类中,我将这个sendPhotoToServe方法称为:if(photoSourcePath!=null){clientClass.sendPhotoToServer(photoSourcePath+“\\”+rowData.get(5));},因为您没有做任何事情就捕获了异常,您确定吗?您是否正在循环调用
    sendpotoserver
    ?另外,请编辑问题以添加相关代码,不要将其放在评论中。你也不例外。我确实在循环中调用了sendPhotoToServer方法。客户端将一些图像放入文件夹,当他选择该文件夹时,我的应用程序会将所有图像发送到服务器。实际上,我不需要永远停止这个while循环。因为这不是针对一个客户的。一个客户端发送一些图像之后,另一个客户端也能够发送图像,因此它需要永远运行。或者在发送2或3个图像之后,客户端希望在两个或三个小时后再发送一些图像,然后每次我需要启动和停止服务器时。但服务器应用程序将24小时运行。