首页 > 代码库 > TCP上传图片
TCP上传图片
上传图片注意的问题:
- 图片重名问题
- 多客户端并发访问时的等待问题(这个不仅是上传图片的问题,只要多客户端与服务端连接就会发生)
解决:
- 把客户端的ip和count(计数)标示作为图片的名字
- 利用多线程技术实现并发访问
TCP上传图片的客户端:
import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class UpLoadPicClient { public static void main(String[] args) throws Exception, IOException { System.out.println("客户端开启......"); //1.创建socket客户端 Socket s = new Socket("192.168.17.1",10000); File picFile = new File("1.jpg"); FileInputStream fis = new FileInputStream(picFile); OutputStream out = s.getOutputStream(); byte[] buf = new byte[1024]; int len = 0; while((len = fis.read(buf))!=-1){ out.write(buf, 0, len); } //告诉服务端写完了 s.shutdownOutput(); //读取服务器端的数据 InputStream in = s.getInputStream(); byte[] bufIn =new byte[1024]; int lenIn = in.read(bufIn); String str = new String(bufIn,0,lenIn); System.out.println(str); fis.close(); s.close(); }}
TCP上传图片的服务端:
import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;public class UpLoadPicServer { public static void main(String[] args) throws Exception { System.out.println("服务端开启....."); //服务端对象 ServerSocket ss = new ServerSocket(10000); while(true){//服务器端一直是开启状态 Socket s = ss.accept();//主线程唯一的任务是不断的等待客户端的连接 //至于每一个连接进来的客户端索要进行的任务,交给其他线程来完成 //这就实现了多客户端的并发访问 //这就是服务器端的原理 new Thread(new UpLoadPic(s)).start();//为每一个连接上的客户端开辟一条线程 }// ss.close(); //服务器端就不需要关闭了 /* * 服务器端的基本技术: * 1.ServerSocket * 2.IO流 * 3.多线程 */ }}
客户端连接后所要进行的任务(线程):
import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;public class UpLoadPic implements Runnable { private Socket s; public UpLoadPic(Socket s) { super(); this.s = s; } @Override public void run() { String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"...connected"); File file = getFile("server_pic",ip);//服务端将图片保存的位置 FileOutputStream fos; try { fos = new FileOutputStream(file); InputStream in = s.getInputStream(); int len = 0; byte[] buf = new byte[1024]; while((len = in.read(buf))!=-1){ fos.write(buf,0,len); } //回馈客户端数据 OutputStream out = s.getOutputStream(); out.write("上传图片成功".getBytes()); fos.close(); s.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static File getFile(String dir,String ip) { File pic_dir = new File(dir); if(!pic_dir.exists()){ pic_dir.mkdir(); } int count = 1; File file = new File(pic_dir,ip+"("+count+").jpg");//解决图片重名的问题 while(file.exists()){ count++; file = new File(pic_dir,ip+"("+count+").jpg"); } return file; }}
TCP上传图片
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。