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