站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题关于文件传输的问题,兄弟们过来讨论一下,看看啊!

关于文件传输的问题,兄弟们过来讨论一下,看看啊!

摘要: 关于文件传输的问题,兄弟们过来讨论一下,看看啊!


先说一下环境:要开发一个文件传输系统,因为限制,除80端口外所有的端口都封闭了。所以不能用SOCKET直接传输文件,想到的是用HTTP协议进行。我现在的程序结构如下:赢各位大侠指点一下错误所在。搞了一天加一个晚上了,现在还没搞定,只好问大家了。程序结构如下:流程是这样的,客户把文件先上传到服务器,再另一个客户端通过定时刷新来接收文件。

  server端:一个servlet文件。代码如下:
///////////serverlet begin/////////////////////////////
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;

public class ServletFileServer extends HttpServlet
{

protected void service(HttpServletRequest req,HttpServletResponse rsp)
{
ObjectMsg msg=null;
try
{
ObjectInputStream in =new ObjectInputStream(req.getInputStream());
msg=(ObjectMsg)in.readObject();

// byte[] tbyte = (byte[]) msg.getValue();
String prefix=System.getProperty("user.dir")+System.getProperty("file.separator")+msg.getName();
System.out.println("new filepath:"+prefix);
// FileOutputStream fileOut=new FileOutputStream("prefix");
// fileOut.write(tbyte);
//fileOut.flush();
// fileOut.close();
in.close();
System.out.println("accept:"+msg.toString());
}
catch(Exception ex)
{
ex.printStackTrace();
}
}


}

///////////serverlet end/////////////////////////////


///////////send file begin/////////////////////////////
客户端代码如下:
public String SendFile(String filePath,String filename)
{
String retM = "";
String httpUrl="http://127.0.0.1:8080/fs/servlet/ServletFileServer";
BufferedReader br=null;
try
{
//准备连接URL;
myURL=new URL(httpUrl);
myHttpCon=(HttpURLConnection)myURL.openConnection();
myHttpCon.setUseCaches(false);
myHttpCon.setDoOutput(true);
myHttpCon.setDoInput(true);
// myHttpCon.setRequestMethod("POST");
// myHttpCon.connect();

//输出流;
ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(byteOut);

//信息;
ObjectMsg outMsg=new ObjectMsg();
//byte[] buffer=new byte[2056];
// FileInputStream filein=new FileInputStream(filePath);
// filein.read(buffer,0,2056);
outMsg.setName(filename);
// outMsg.setValue(buffer);

//输出到缓冲区;
out.writeObject(outMsg);
//out.flush();
out.close();
byte[] buf=byteOut.toByteArray();

//输出信息到服务器;
myHttpCon.setRequestProperty("Content-type","application/octet-stream");
myHttpCon.setRequestProperty("Content-length",""+buf.length);
DataOutputStream dataOut = new DataOutputStream(myHttpCon.getOutputStream());

dataOut.write(buf);
//dataOut.flush();
dataOut.close();

//响应消息流;
ObjectInputStream in = new ObjectInputStream(myHttpCon.getInputStream());
//接收响应对象;
ObjectMsg msgIn=(ObjectMsg)in.readObject();
in.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
return retM;
}

}
///////////send file end/////////////////////////////
上面是一个客户端的主要文件部分。
另一个文件用到如下:
public class ObjectMsg implements Serializable{
private int id;
private String name;
private String sendMsg;
private byte[] value;
private static final long serialVersionUID = 65474834800040131L;

public ObjectMsg()
{

}

public ObjectMsg(int iid,String sname,String ssendMsg,byte[] bvalue)
{
this.id=iid;
this.name=sname;
this.sendMsg=ssendMsg;
this.value=bvalue;
}

public void setId(int iid)
{
this.id=iid;
}
public void setName(String sname)
{
this.name=sname;
}
public void setSendMsg(String ssendMsg)
{
this.sendMsg=ssendMsg;
}
public void setValue(byte[] bvalue)
{
this.value=bvalue;
}

public int getId()
{
return id;
}
public String getName()
{
return name;
}
public String getSendMsg()
{
return sendMsg;
}
public byte[] getValue()
{
return value;
}

}

我现在暂时还没有读文件和写文件进去。只是发送一个字符串过去。结果出现如下错误:

java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2232)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2698)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:750)
at java.io.ObjectInputStream.(ObjectInputStream.java:268)
at filetransfers.com.FileSendClient.SendFile(FileSendClient.java:74)
at filetransfers.Frame1.jButton5_actionPerformed(Frame1.java:157)
at filetransfers.Frame1_jButton5_actionAdapter.actionPerformed(Frame1.java:169)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
at java.awt.Component.processMouseEvent(Component.java:5488)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
at java.awt.Component.processEvent(Component.java:5253)
at java.awt.Container.processEvent(Container.java:1966)
at java.awt.Component.dispatchEventImpl(Component.java:3955)
at java.awt.Container.dispatchEventImpl(Container.java:2024)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
at java.awt.Container.dispatchEventImpl(Container.java:2010)
at java.awt.Window.dispatchEventImpl(Window.java:1774)
at java.awt.Component.dispatchEvent(Component.java:3803)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

  恳请各位帮忙看看啊。谢谢!


顶一个 实在是对这方面不熟悉


System.out.println("new filepath:"+prefix);
这行出来没有?


up


System.out.println("new filepath:"+prefix);
这行出来没有?
没有啊,好像在这 msg=(ObjectMsg)in.readObject();这里就出问题了



在vba就是文件指針出錯



↑返回目录
前一篇: Tomcat下 URL 如果带有汉字,如:http://localhost:8080/app/temp/upload/非技术.jpg 就显示不出来,大虾帮帮忙
后一篇: SPRING+JSF+Hibernate出错,请高手帮忙!