首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

Client ,Server基于socket 的图片下传(WEB)

2012-08-29 
Client ,Server基于socket 的图片上传(WEB)?服务器端:?servletdescriptionThis is the description of

Client ,Server基于socket 的图片上传(WEB)

?

服务器端:

?

<servlet><description>This is the description of my J2EE component</description><display-name>This is the display name of my J2EE component</display-name><servlet-name>InitServlet</servlet-name><servlet-class>com.dne.pg.servlet.InitServlet</servlet-class><load-on-startup>2</load-on-startup></servlet><servlet-mapping><servlet-name>InitServlet</servlet-name><url-pattern>/servlet/InitServlet</url-pattern></servlet-mapping>
?

?

?

package com.javaliver.servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.Locale;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts.Globals;import com.javaliver.file.FileTransServer;public class InitServlet extends HttpServlet {/** * Constructor of the object. */public InitServlet() {super();}/** * Destruction of the servlet. <br> */public void destroy() {super.destroy(); // Just puts "destroy" string in log}/** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. *  * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");out.println("<HTML>");out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println("  <BODY>");out.print("    This is ");out.print(this.getClass());out.println(", using the GET method");out.println("  </BODY>");out.println("</HTML>");out.flush();out.close();}/** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to post. *  * @param request the request send by the client to the server * @param response the response send by the server to the client * @throws ServletException if an error occurred * @throws IOException if an error occurred */public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.getSession().setAttribute(Globals.LOCALE_KEY, Locale.ENGLISH);response.setContentType("text/html");PrintWriter out = response.getWriter();out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");out.println("<HTML>");out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");out.println("  <BODY>");out.print("    This is ");out.print(this.getClass());out.println(", using the POST method");out.println("  </BODY>");out.println("</HTML>");out.flush();out.close();}/** * Initialization of the servlet. <br> * * @throws ServletException if an error occure */public void init() throws ServletException {// Put your code herenew Thread(new FileTransServer()).start();}}
?

?

package com.javaliver.file.socket;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import org.apache.log4j.Logger;public class FileTransServer implements Runnable {private int port = 9992;private ServerSocket serverSocket = null;private boolean isRuning;private static final Logger log = Logger.getLogger(FileTransServer.class);public FileTransServer() {}public void run(){isRuning = true;try {serverSocket = new ServerSocket(port);} catch (IOException e1) {e1.printStackTrace();}while(isRuning){try {log.info("FileTransServerSocket()*********step1 ;port is "+port);Socket socket = serverSocket.accept();FileTransServerSocket cs = new FileTransServerSocket();cs.setSocket(socket);log.info("开始处理线程" + cs.getSocket().getRemoteSocketAddress().toString());new Thread(cs).start();} catch (Exception e) {log.info("FileTransServerSocket()*********step1 ****it is not usual!;");e.printStackTrace();} finally {}}}}

?

package com.javaliver.file.socket;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.Socket;import java.text.SimpleDateFormat;import java.util.Date;import java.util.PropertyResourceBundle;import java.util.ResourceBundle;import org.apache.log4j.Logger;public class FileTransServerSocket implements Runnable {private DataOutputStream out = null;private Socket socket;private DataInputStream getMessageStream = null;private static final Logger log = Logger.getLogger(FileTransServerSocket.class);public FileTransServerSocket() {}public void run(){try {this.handleConnection(this.socket);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}private void handleConnection(Socket socketConnection) throws Exception {DataInputStream inputStream = null;try {inputStream = new DataInputStream(new BufferedInputStream(socketConnection.getInputStream()));} catch (Exception e) {e.printStackTrace();if (inputStream != null)inputStream.close();System.out.print("接收消息缓存错误\n");throw e;}try {int bufferSize = 8192;byte[] buf = new byte[bufferSize];int passedlen = 0;long len = 0;if(inputStream==null){System.out.println("没有读取到图片名称");return ;}System.out.println("读取文件名称");String passFileName = inputStream.readUTF();String savePath = getSavePath() + "\"+passFileName;DataOutputStream fileOut = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));if(inputStream==null){System.out.println("没有读到文件长度");return ;}len = inputStream.readLong();log.info("文件的长度为:" + len + "\n");log.info("开始接收文件!" + "\n");while (true) {int read = 0;if (inputStream != null) {read = inputStream.read(buf);}passedlen += read;if (read == -1) {break;}log.info("文件接收了" + (passedlen * 100 / len) + "%\n");fileOut.write(buf, 0, read);}log.info("接收完成,文件存为" + savePath + "\n");if(fileOut!=null){fileOut.flush();fileOut.close();}if(inputStream!=null){inputStream.close();}socketConnection.close();} catch (Exception e) {System.out.println(e.getMessage());e.getStackTrace();log.info("接收消息错误" + "\n"+e.getStackTrace()+e.getMessage());return;}}    private String getSavePath() {    PropertyResourceBundle res =(PropertyResourceBundle) ResourceBundle.getBundle("Framework");String tomcatPath=System.getProperty("catalina.home");tomcatPath=tomcatPath.replace("/", File.separator) +"/webapps";String savePath= tomcatPath + res.getString("imagepath");savePath = savePath.replace("/", File.separator);return savePath;}public Socket getSocket() {return socket;}public void setSocket(Socket socket) {this.socket = socket;}}

?

?

1:serverSocket = new ServerSocket(port);

?

当服务器(Tomcat)启动加载的时候InitServlet 创建了一个能监听某些客户机访问的入口

FileTransServer 在9992端口上监听。

?

2:Socket socket = serverSocket.accept();

创建了一个新的套接字,称为socket,这个套接字也是用9992端口

?


客户端的测试类:

import java.io.BufferedInputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.net.Socket;import java.net.UnknownHostException;public class SocketU {// private String ip = "";// 设置成服务器IPprivate String ip = "localhost";private int port = 9992;private String sendMessage = "C:\\1.gif";// 这个路径你自己读取的照片的位置Socket socketConnection = null;DataOutputStream sendMsg = null;DataInputStream getMsg = null;DataInputStream fis = null;public static void main(String arg[]) throws Exception {SocketU clientTest = new SocketU();clientTest.setUpConnection();clientTest.sendMessage();}public void setUpConnection() {try {socketConnection = new Socket(ip, port);sendMsg = new DataOutputStream(socketConnection.getOutputStream());getMsg = new DataInputStream(new BufferedInputStream(socketConnection.getInputStream()));} catch (UnknownHostException e) {System.out.println("连接错误: 未知主机 " + sendMessage + ":" + port);} catch (IOException e) {System.out.println("连接时出错: " + e);}}private void sendMessage() throws Exception {try {File img = new File(sendMessage);if (img.exists()) {fis = new DataInputStream(new BufferedInputStream(new FileInputStream(img)));sendMsg.writeUTF(img.getName());sendMsg.flush();sendMsg.writeLong((long) img.length());sendMsg.flush();int bufferSize = 8192;byte[] buf = new byte[bufferSize];while (true) {Thread.sleep(1L);int read = 0;if (fis != null) {read = fis.read(buf);}if (read == -1) {break;}System.out.println("File Saved-----------------" + read+ "%\n");sendMsg.write(buf, 0, read);}}if (fis != null) {fis.close();}socketConnection.close();sendMsg.flush();if (sendMsg != null) {sendMsg.close();}System.out.println("Upload File Over!!!");} catch (Exception e) {e.printStackTrace();} finally {}}}
?

?

?

?

TCP在客户端的clientSocket和服务器端的socket之间建立了一条直接的虚礼管道,该客户机与服务器可以通过该管道彼此发送字节,并且发送的所有字节将按顺序到达对方。随着socket的建立,该服务器能继续使用serverSocket 监听其它客户机的连接请求。

热点排行