Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过java套接字传输证书文件时出现无效的公钥安全对象文件错误_Java_Sockets_Certificate - Fatal编程技术网

通过java套接字传输证书文件时出现无效的公钥安全对象文件错误

通过java套接字传输证书文件时出现无效的公钥安全对象文件错误,java,sockets,certificate,Java,Sockets,Certificate,我编写了一个java socket程序将证书文件传输到不同的机器,我能够传输文件,但是在打开证书时,我得到了一个错误提示,如无效的公钥安全对象文件这可能是什么原因,甚至我使用winMerge工具将原始文件与传输的文件进行比较(两者都相同) 请帮我解决这个问题 客户端 private void transferCarsCertificates() { final File carsCertificatesFolder = new File("D:\\Cordys\\Admin Reposi

我编写了一个java socket程序将证书文件传输到不同的机器,我能够传输文件,但是在打开证书时,我得到了一个错误提示,如无效的公钥安全对象文件这可能是什么原因,甚至我使用winMerge工具将原始文件与传输的文件进行比较(两者都相同)

请帮我解决这个问题

客户端

private void transferCarsCertificates()
{
    final File carsCertificatesFolder = new File("D:\\Cordys\\Admin Repository Server\\signedbuild8\\certificates");
    final File[] certFiles = carsCertificatesFolder.listFiles(new FilenameFilter() {

        @Override
        public boolean accept(File dir, String name) 
        {
            if(name.lastIndexOf(".")>0)
            {
                int extention = name.lastIndexOf(".");
                if(name.substring(extention).equals(".cer") && !name.contains(ServerId))
                {
                    return true;
                }
            }               
            return false;
        }
    });
    if(certFiles!=null)
    {
        int read = 0;
        int bytesRead = 0;
        byte[] fileBytes;
        InputStream fileInputStream = null;
        for(int i=0;i<certFiles.length; i++)
        {
            final Communicator communicator = new Communicator(Communicator.FILETRANSFER, "CARS_CERT");
            communicator.setFileName(certFiles[i].getName());
            communicator.setFileSize(certFiles[i].length());        
            fileBytes = new byte[(int)certFiles[i].length()];
            try 
            {
                fileInputStream = (InputStream)new FileInputStream(certFiles[i]);

                while (read < fileBytes.length && (bytesRead = fileInputStream.read(fileBytes, read, fileBytes.length - read)) >= 0) 
                {
                    read = read + bytesRead;
                }
                communicator.setFileData(fileBytes);
                client.sendMessage(communicator);
                logger.info(certFiles[i].getName()+" transfered sucessfully");
            } 
            catch (FileNotFoundException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    else
    {
        logger.error("CARS Certificates: "+certFiles+" at location: "+carsCertificatesFolder.getAbsolutePath());
        sendMessage(new Communicator(Communicator.MESSAGE, "FAILED_TO_FIND_THE_CARS_CERTIFICATES"));
        disconnect();
    }
}
private void reciveFiles(final Communicator communicator)
{
    final String message = communicator.getMessage();
    final String destination = message.contains("CARS_CERT") ? destinationDir : destinationDir;
    final File cert = new File(destinationDir+File.separator+communicator.getFileName());
    if(cert.exists())
    {
        cert.setWritable(true);
        cert.delete();
    }
    try 
    {
        cert.createNewFile();
        final OutputStream outPutStream = (OutputStream) new FileOutputStream(cert);
        outPutStream.write(communicator.getFileData(), 0, (int)communicator.getFileSize());
        logger.info(communicator.getFileName()+" is placed successfullt at destination: "+destination);
    }
    catch (IOException ioException)
    {
        logger.error("Destination Dir: "+destinationDir, ioException);
    }       
}
private void transferCarsCertificates()
{
最终文件carsCertificatesFolder=新文件(“D:\\Cordys\\Admin Repository Server\\signedbuild8\\certificates”);
最终文件[]certFiles=carsCertificatesFolder.listFiles(新文件名筛选器(){
@凌驾
公共布尔接受(文件目录,字符串名称)
{
如果(name.lastIndexOf(“.”)大于0)
{
int extention=name.lastIndexOf(“.”);
if(name.substring(extention).equals(“.cer”)&&&!name.contains(ServerId))
{
返回true;
}
}               
返回false;
}
});
if(certFiles!=null)
{
int read=0;
int字节读取=0;
字节[]文件字节;
InputStream文件InputStream=null;
对于(int i=0;i=0)
{
读取=读取+字节读取;
}
communicator.setFileData(文件字节);
client.sendMessage(通信器);
logger.info(certFiles[i].getName()+“已成功传输”);
} 
catch(filenotfounde异常)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
} 
捕获(IOE异常)
{
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
其他的
{
logger.error(“CARS证书:+certFiles+”位于:+carsCertificatesFolder.getAbsolutePath());
sendMessage(新通信器(Communicator.MESSAGE,“未能找到车辆证书”);
断开连接();
}
}
专用无效接收文件(最终通信器)
{
最终字符串消息=communicator.getMessage();
最终字符串destination=message.contains(“汽车证书”)?destinationDir:destinationDir;
最终文件证书=新文件(destinationDir+File.separator+communicator.getFileName());
如果(证书存在())
{
cert.setWritable(true);
证书删除();
}
尝试
{
cert.createNewFile();
最终OutputStream OutputStream=(OutputStream)新文件OutputStream(cert);
write(communicator.getFileData(),0,(int)communicator.getFileSize());
logger.info(communicator.getFileName()+”成功放置在目标“+”处);
}
捕获(IOException IOException)
{
logger.error(“目标目录:”+destinationDir,ioException);
}       
}
服务器端

 private synchronized void broadcastFiles(String clientId, Communicator communicator)
{
    final String time = simpleDateFormat.format(new Date());
    final Set<Entry<String, ClientThread>> set = listMap.entrySet();
    final Iterator<Entry<String, ClientThread>> iterator = set.iterator();
    while(iterator.hasNext())
    {
        final Entry<String, ClientThread> entry = iterator.next();
        if(entry.getKey()!=clientId)
        {
            final ClientThread clientThread =  entry.getValue();
            if(!clientThread.transferFiles(communicator))
            {
                listMap.remove(clientThread);
                display("Disconnected Client " + clientThread.id + " removed from list.");
            }
            logger.info(time+"File broadcasted: "+communicator.getFileName());
        }
    }
}
专用同步无效广播文件(字符串clientId,通信器)
{
最终字符串时间=SimpleDataFormat.format(新日期());
final Set=listMap.entrySet();
final Iterator Iterator=set.Iterator();
while(iterator.hasNext())
{
final Entry=iterator.next();
if(entry.getKey()!=clientId)
{
final ClientThread ClientThread=entry.getValue();
如果(!clientThread.transferFiles(通信器))
{
移除(clientThread);
显示(“断开连接的客户端”+clientThread.id+“已从列表中删除”);
}
logger.info(时间+”文件广播:“+communicator.getFileName());
}
}
}

我可以通过从

while (read < fileBytes.length && (bytesRead = fileInputStream.read(fileBytes, read, fileBytes.length - read)) >= 0) 
            {
                read = read + bytesRead;
            }
while (bufferedInputStrem.read(fileBytes, 0, (int)certFiles[i].length()) >= 0) {}