使用来Socket可以做到,不过直接源编程一般都是在局域网内,如果要在不同局域网间通信,需要使用一台有公网IP的服务器,可以电脑A和电脑B同时连接服务器,然后A向服务器传递文件,服务器再将文件转发电脑B。也可以使用打洞的方式使A、B互联,此时服务器的作用是辅助打洞。A、B向服务器发送信息后socket不要关闭(假设使用10989端口),同时使用Serversocket绑定监听相同的端口(监听10989端口)。在java中有参数可以做到,具体方法请自行网络。服务器获取到A、B的外网地址和端口,将A的外网地址信息发送给B、将B的外网地址信息发送给A。然后使用A没有关闭的Socket向B发送一组信息(此时连接会失败,但是B的路由表上已经记录了A的信息),发送后A向服务器发送消息,服务器告诉B A已经发送消息。然后B使用未关闭的socket向A发送消息,就和A上监听的ServerSocket取得连接了。之后就可以互相传递数据。
2. JAVA怎么通过socket传输各种类型文件
一个字 流。
socket 连接上后 把要传的文件转成outputstream 然后客户端用inputstream接收后再再写入到硬盘。
3. java 服务器与客户端的文件传输
可以直接通过流的形式上传或者下载。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
import hkrt.b2b.view.util.Log;
import java.util.Vector;
import zn.ccfccb.util.CCFCCBUtil;
/**
*/
public class CCFCCBSftp {
/**
* 连接sftp服务器
*
* @return
*/
public static ChannelSftp connect() {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(CCFCCBUtil.CCFCCBHOSTNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);
Session sshSession = jsch.getSession(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);
System.out.println("Session created.");
sshSession.setPassword(CCFCCBUtil.CCFCCBLOGINPASSWORD);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + CCFCCBUtil.CCFCCBHOSTNAME + ".");
} catch (Exception e) {
}
return sftp;
}
/**
* 连接sftp服务器
*
* @param host 主机
* @param port 端口
* @param username 用户名
* @param password 密码
* @return
*/
public static ChannelSftp connect(String host, int port, String username,
String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jsch.getSession(CCFCCBUtil.CCFCCBHOSTNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22);
Session sshSession = jsch.getSession(CCFCCBUtil.CCFCCBLOGINNAME, host, port);
System.out.println("Session created.");
sshSession.setPassword(CCFCCBUtil.CCFCCBLOGINPASSWORD);
Properties sshConfig = new Properties();
sshConfig.put("StrictHostKeyChecking", "no");
sshSession.setConfig(sshConfig);
sshSession.connect();
System.out.println("Session connected.");
System.out.println("Opening Channel.");
Channel channel = sshSession.openChannel("sftp");
channel.connect();
sftp = (ChannelSftp) channel;
System.out.println("Connected to " + host + ".");
} catch (Exception e) {
}
return sftp;
}
/**
* 上传文件
*
* @param directory 上传的目录
* @param uploadFile 要上传的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(uploadFile);
sftp.put(new FileInputStream(file), file.getName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 下载文件
*
* @param directory 下载目录
* @param downloadFile 下载的文件
* @param saveFile 存在本地的路径
* @param sftp
* @return
*/
public static String download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
File file = new File(saveFile);
FileOutputStream fos = new FileOutputStream(file);
sftp.get(downloadFile, fos);
sftp.disconnect();
fos.close();
} catch (Exception e) {
Log.info("下载文件过程出错:" + e.getMessage());
return "false";
}
return "true";
}
/**
* 删除文件
*
* @param directory 要删除文件所在目录
* @param deleteFile 要删除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory);
sftp.rm(deleteFile);
} catch (Exception e) {
}
}
/**
* 列出目录下的文件
*
* @param directory 要列出的目录
* @param sftp
* @return
* @throws SftpException
*/
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException {
return sftp.ls(directory);
}
public static void main(String[] args) {
CCFCCBSftp sf = new CCFCCBSftp();
String host = CCFCCBUtil.CCFCCBHOSTNAME;
int port = 22;
String username = CCFCCBUtil.CCFCCBLOGINNAME;
String password = CCFCCBUtil.CCFCCBLOGINPASSWORD;
String directory = "/ccfccb/904999900099/download/";
//String uploadFile = "D:\\tmp\\upload.txt";
String downloadFile = "CCF_904999900099_20150317_0001.zip";
String saveFile = CCFCCBUtil.CCFCCBUploadFilePath + "//" + "CCF_904999900099_20150317_0001.zip";
//String deleteFile = "delete.txt";
ChannelSftp sftp = CCFCCBSftp.connect(host, port, username, password);
//sf.upload(directory, uploadFile, sftp);
CCFCCBSftp.download(directory, downloadFile, saveFile, sftp);
//sf.delete(directory, deleteFile, sftp);
try {
sftp.cd(directory);
// sftp.mkdir("ss");
System.out.println("finished");
} catch (Exception e) {
}
}
}
4. java 传输 获取文件类型
根据文件名的后缀,把它分离出来就可以了
不知道你是实现B/S还是C/S,但是不管是那一种,在传文件的内容之前,应该可以先传回文件的芦返搏名字和后缀名。
对世渗于B/S在传回的数据中,在最前面有文件的基本信息,包括文件名。对于C/S就更方便,可以自己先传回文件名陪祥和后缀名。
5. java怎么把文件传输到服务器
String realpath = ServletActionContext.getServletContext().getRealPath("/upload") ;//获取服务器路径
String[] targetFileName = uploadFileName;
for (int i = 0; i < upload.length; i++) {
File target = new File(realpath, targetFileName[i]);
FileUtils.File(upload[i], target);
//这是一个文件复制类File()里面就是IO操作,如果你不用这个类也可以回自己写答一个IO复制文件的类
}
其中private File[] upload;// 实际上传文件
private String[] uploadContentType; // 文件的内容类型
private String[] uploadFileName; // 上传文件名
这三个参数必须这样命名,因为文件上传控件默认是封装了这3个参数的,且在action里面他们应有get,set方法
6. java编程 文件传输共享 通信
使用socket来传输数据,并且使用UDP来保证传递的速度。每一个程序既是客户端又是服务器,在指定端口侦听。可以开两个或者以上的端口,一个端口不断往外发送信息表名自己在线,并且获取其他机器上的传递的信息,将其对应机器设为在线。
传递文此陵件的时候使桐扒销用socket的建立的UDP连接。因为是局域网丢包局游率基本上可以忽略。
使用java来做本来就可以跨操作系统,不过要注意不同操作系统间文件的差异性。
大文件的分段传输和断点续传,都可以使用随机读写类RandomAccessFile来实现。
只需数据库限制用户可以让其登录,为其分配用户名。
总体来说原理比较简单,就是比较麻烦,实现起来需要时间比较长,主要是文件传输的时候遇到的情况比较多都要考虑到。
7. java 传输 获取文件类型
获取文件类型,一般的是列出目前所有的文件类型,根据表头进行相应判断,示例如下:
/**
*件头是位于文件开头的一段承担一定任务的数据,一般都在开头的部分。
*头文件作为一种包含功能函数、数据接口声明的载体文件,用于保存程序的声明(declaration),而定义文件用于保存程序的实现(implementation)。
*为了解决在用户上传文件的时候在服务器端判断文件类型的问题,故用获取文件头的方式,直接读取文件的前几个字节,来判断上传文件是否符合格式。具体代码如下:
*Java代码:
*
*/
packagecom.yonyou.sud.file;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.util.HashMap;
/**
*获取和判断文件头信息
*
*@authorSud
*
*/
publicclassGetTypeByHead{
//缓存文件头信息-文件头信息
publicstaticfinalHashMap<String,String>mFileTypes=newHashMap<String,String>();
static{
//images
mFileTypes.put("FFD8FF","jpg");
mFileTypes.put("89504E47","png");
mFileTypes.put("47494638","gif");
mFileTypes.put("49492A00","tif");
mFileTypes.put("424D","bmp");
//
mFileTypes.put("41433130","dwg");//CAD
mFileTypes.put("38425053","psd");
mFileTypes.put("7B5C727466","rtf");//日记本
mFileTypes.put("3C3F786D6C","xml");
mFileTypes.put("68746D6C3E","html");
mFileTypes.put("44656C69766572792D646174653A","eml");//邮件
mFileTypes.put("D0CF11E0","doc");
mFileTypes.put("5374616E64617264204A","mdb");
mFileTypes.put("252150532D41646F6265","ps");
mFileTypes.put("255044462D312E","pdf");
mFileTypes.put("504B0304","docx");
mFileTypes.put("7221","rar");
mFileTypes.put("57415645","wav");
mFileTypes.put("41564920","avi");
mFileTypes.put("2E524D46","rm");
mFileTypes.put("000001BA","mpg");
mFileTypes.put("000001B3","mpg");
mFileTypes.put("6D6F6F76","mov");
mFileTypes.put("3026B2758E66CF11","asf");
mFileTypes.put("4D546864","mid");
mFileTypes.put("1F8B08","gz");
}
/**
*根据文件路径获取文件头信息
*
*@paramfilePath
*文件路径
*@return文件头信息
*/
publicstaticStringgetFileType(StringfilePath){
System.out.println(getFileHeader(filePath));
System.out.println(mFileTypes.get(getFileHeader(filePath)));
returnmFileTypes.get(getFileHeader(filePath));
}
/**
*根据文件路径获取文件头信息
*
*@paramfilePath
*文件路径
*@return文件头信息
*/
(StringfilePath){
FileInputStreamis=null;
Stringvalue=null;
try{
is=newFileInputStream(filePath);
byte[]b=newbyte[4];
/*intread()从此输入流中读取一个数据字节。
*intread(byte[]b)从此输入流中将最多b.length个字节的数据读入一个byte数组中。
*intread(byte[]b,intoff,intlen)从此输入流中将最多len个字节的数据读入一个byte数组中。
*/
is.read(b,0,b.length);
value=bytesToHexString(b);
}catch(Exceptione){
}finally{
if(null!=is){
try{
is.close();
}catch(IOExceptione){
}
}
}
returnvalue;
}
/**
*将要读取文件头信息的文件的byte数组转换成string类型表示
*
*@paramsrc
*要读取文件头信息的文件的byte数组
*@return文件头信息
*/
(byte[]src){
StringBuilderbuilder=newStringBuilder();
if(src==null||src.length<=0){
returnnull;
}
Stringhv;
for(inti=0;i<src.length;i++){
//以十六进制(基数16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写
hv=Integer.toHexString(src[i]&0xFF).toUpperCase();
if(hv.length()<2){
builder.append(0);
}
builder.append(hv);
}
System.out.println(builder.toString());
returnbuilder.toString();
}
publicstaticvoidmain(String[]args)throwsException{
finalStringfileType=getFileType("E:/Java编程思想读书笔记.docx");
System.out.println(fileType);
}
}
8. java文件发给别人,别人需要部署吗
需要部署的
1.搭建一台FTP服务器,然后通过FTP协议进行文件传输。这个方式固然有效,但是有点麻如戚皮烦。
2.通过Socket来传输文件,这种方法需要编写一个客户端和一个服务端,这种方案比较通用,在其他方案渣差不可行的情况下,这种方案还是不错的。
3.搭建一台HTTP服务器(例如tomcat),上传文件时直接将文件上传到这台机器上,仔枝需要部署用来上传文件的应用。
4.如果是windows系统可以采取最简单的形式来完成文件传输(文件共享)。
9. java开发的信息系统里,jsp与java文件是怎么传递数据的
jsp与java文件传递数据可以使用Servlet类来传递,jsp将数据存入到request对象中,Servlet类获取这个request对象,并将数据取出。学习java开发推荐选择千锋教育,一群草根奉献着自己的青春年华,为创造一个有真正社会价值的职业教育机构“千锋教育千锋教育”而奋力拼搏。
学习Java的优势:
1、Java广受欢迎:Java仍然是世界上最受欢迎的编程语言之一,有无限多种方法使用Java。在TIOBE多汪源次公布的编程语言排行榜,Java领跑前三!
2、薪资可观:职业规划公司Gooroo在一份薪资和需求报告中指出,Java仍然是美国、英国和澳大利亚最受欢迎和薪资最高的编程语言之一。
3、Java程序员市场紧缺:据不完全统计,目前国内每年IT人或陵歼才缺口达20万之多,而且缺口还在扩大,Java作为广泛使用的编程语言,拥有庞大的客户群,现有的人才储备还远远不够,在可预计的未来,Java程序员都将处于供小于求的状态。
4、Java无处不在:据估计,全球范围内有超过30亿部设备运行Java,超过其他任何一种语言。
5、优秀的开发工具:能够确保工作效率的优秀开发工具。
想要了解更多关于java开发的相关信息,推荐咨询千锋教育。千锋企合作部整合大量企业客户资源,紧抓当下企业需求,将技术和项目完美结合千锋课程体系,力求培养更多优质人才服务企业,不断提升学员竞争力,链接企业用人标准的培训课程及实战项目,让企业招聘用人的技术要求与千锋学员的技术充分对接。近年来不断引进阿里钉钉小程序技术、红帽认证、腾讯云、亚马逊等,通过与企业的深度融合实现千锋教研和衫冲就业服务的迭代升级,专业性值得信赖。
10. java中怎么实现ftp文件传输
packagecom.quantongfu.ftp.ftp;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.net.ServerSocket;
importjava.util.List;
importorg.apache.commons.net.ftp.FTPReply;
importorg.apache.log4j.Logger;
importorg.apache.log4j.net.SocketServer;
importcom.quantongfu.conf.FtpConf;
/**
*@项目名称:telinSyslog
*@文件名称:Ftp.java
*@创建日期:2015年9月14日下午3:22:08
*@功能描述:ftp实体类,用于连接,上传
*@修订记录:
*/
publicclassFtp{
privatestaticLoggerlogger=Logger.getLogger(Ftp.class);
privateFTPClientftp;
/**
*
*@parampath
*上传到ftp服务器哪个路径下
*@paramaddr
*地址
*@paramport
*端口号
*@paramusername
*用户名
*@parampassword
*密码
*@return
*@throwsException
*/
世伏publicbooleanconnect()throwsException{
booleanresult=false;
ftp=newFTPClient();
intreply;
ftp.connect(FtpConf.FTP_HOST,FtpConf.FTP_PORT);
ftp.login(FtpConf.FTP_USER_NAME,FtpConf.FTP_PASSWORD);
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.setDataTimeout(60000);
reply=ftp.getReplyCode();
if(!FTPReply.isPositiveCompletion(reply)){
ftp.disconnect();
returnresult;
}
if(FtpConf.IS_FTP_DIRECTORY){
ftp.changeWorkingDirectory(FtpConf.FTP_DIRECTORY);
}
result=true;
returnresult;
}
/**
*
*@paramfiles
*上传的文件
*@throwsException
*/
publicbooleanupload(Filefile)throwsIOException{
FileInputStreaminput=null;
try{
input=newFileInputStream(file);
booleanb=ftp.storeFile(file.getName()+".tmp",input);
if(b){
b=ftp.rename(file.getName()+".tmp",file.getName());
缺族}
returnb;
}catch(Exceptione){
e.printStackTrace();
returnfalse;
}finally{
if(input!=null){
input.close();
}
}
}
/**
*
*@paramfiles
*上传的文件
*@throwsException
*/
publicbooleanupload(ServerSocketserver,Filefile)throwsException{
FileInputStreaminput=null;
try{
if(!file.exists()){
returntrue;
}
input=newFileInputStream(file);
booleanb=ftp.storeFile(server,file.getName()+".tmp",input);
if(b){
b=ftp.rename(file.getName()+".tmp",file.getName());
if(b){
file.delete();
}
}
returnb;
搜扮携}catch(Exceptione){
logger.error("ftperror"+e.getMessage());
returnfalse;
}finally{
if(input!=null){
try{
input.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
/*断开连接*/
publicvoiddisConnect(){
try{
if(ftp!=null){
ftp.disconnect();
}
}catch(IOExceptione){
e.printStackTrace();
}
}
/*获取连接*/
publicstaticFtpgetFtp(){
Ftpftp=newFtp();
try{
ftp.connect();
}catch(Exceptione){
logger.error("FTP连接异常"+e.getMessage());
e.printStackTrace();
}
returnftp;
}
/*重连*/
publicFtpreconnect(){
disConnect();
returngetFtp();
}
}
使用Apache FtpClient jar包,获取jar : http://commons.apache.org/net/