/* 上传图片 图片为字节数据,不能用字符流读取 */ import java.io.*; import java.net.*; import static java.lang.System.*; /* 客户端: 1. 建立客户端点 2,读取客户端已有图片数据 3,通过socket输出流将数据发给服务端 4,读取服务端反馈信息 5,关闭流 */ class PictureClient { public static void main(String[] args) throws Exception { //对客户端上传的图片进行限制 if(args.length!=1)//args为运行java文件时在后面跟的参数 { out.println("请选择一个jpg格式的图片"); return ; } File file = new File(args[0]); if(!(file.exists()&&file.isFile())) { out.println("文件不存在或者文件不正确"); return ; } if(!file.getName().endsWith("jpg")) { out.println("请选择一个jpg格式的图片"); return ; } if(file.length()>1024*1024*5) { out.println("图片大于5M,请重新传入"); return ; } Socket s = new Socket("127.0.0.1",4456); //读图片字节数据 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); //写到socket输出流 PrintStream out = new PrintStream(s.getOutputStream(),true); byte[] buf = new byte[1024]; int len = 0; while((len=bis.read(buf))!=-1) { out.write(buf,0,len); } s.shutdownOutput();//向socket输入流写入流结束标记 //读取服务端返回的信息 BufferedReader bufr = new BufferedReader(new InputStreamReader(s.getInputStream())); String str = bufr.readLine(); System.out.println(str); s.close(); bis.close(); } } /* 服务端: 1,建立服务端点 2,通过socket输入流读取客户端上传的数据 3,通过字节输出流将数据写入到新的图片文件 4,反馈信息给客户端 5,关闭流 */ /* 这个服务端有个局限性,当A客户端连接上以后,被服务端获取到 服务端执行具体流程。这时,B客户连接,只有等待A客户执行完 因为服务端暂时还没有处理完A客户端的请求, 还没有循环回来执行下次accept方法 所以,暂时获取不到B客户端对象 为了可以让多个客户端同时并发访问服务端 那么服务端最好就是将每个客户端封装到一个单独的线程中 这样,就可以同时处理多个客户端的请求 class PictureServer { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(4456); while(true) { Socket s = ss.accept(); //获取客户端IP并显示连接成功 String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"......连接成功"); //字节流读取socket输入流 BufferedInputStream bis = new BufferedInputStream(s.getInputStream()); //将字节数据写入到一个新的图片文件中 PrintStream out = new PrintStream(new FileOutputStream("e:/mypic.jpg"),true); byte[] buf = new byte[1024]; int len = 0; while((len=bis.read(buf))!=-1) { out.write(buf,0,len); } //反馈信息给客户端 PrintWriter pw = new PrintWriter(s.getOutputStream(),true); pw.println("图片上传成功"); s.close(); out.close(); } ss.close(); } } */ //确定客户端需要执行的代码,封装到多线程的run方法中, //就可以实现服务端的多线程,客户端也就能实现互不影响的访问服务端。 class ServerThread implements Runnable { private Socket s; ServerThread(Socket s) { this.s = s; } public void run() { try { //获取客户端IP并显示连接成功 String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"......连接成功"); //字节流读取socket输入流 BufferedInputStream bis = new BufferedInputStream(s.getInputStream()); //将字节数据写入到一个新的图片文件中 int count = 1; File f = new File("e:/"+ip+".jpg"); while(f.exists())//如果文件已经存在,则重新命名(可以用ip地址表示不同客户端上传的图片文件) f = new File("e:/"+ip+"("+(count++)+")"+".jpg"); PrintStream out = new PrintStream(new FileOutputStream(f),true); byte[] buf = new byte[1024]; int len = 0; while((len=bis.read(buf))!=-1) { out.write(buf,0,len); } //反馈信息给客户端 PrintWriter pw = new PrintWriter(s.getOutputStream(),true); pw.println("图片上传成功"); s.close(); out.close(); } catch (Exception e) { new RuntimeException("上传失败"); } } } class PictureServer { public static void main(String[] args) throws Exception { ServerSocket ss = new ServerSocket(4456); while(true) { Socket s = ss.accept(); //循环侦听服务器端口是否有访问该端口的进程,有则接收 ServerThread st= new ServerThread(s);//将客户端socket传入服务端 new Thread(st).start();//开启服务端线程为客户端服务 } //ss.close(); } }
相关推荐
Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-文件上传Socket网络编程-...
本文将深入探讨“C#网络编程,socket文件上传下载”这一主题,帮助开发者理解如何利用C#进行高效且可靠的网络通信。 网络编程是通过网络连接在不同设备间交换数据的过程。在C#中,Socket类提供了实现网络通信的基本...
10. **设计模式**:在实现文件上传服务时,可以借鉴设计模式,如工厂模式用于创建数据库连接,单例模式用于保证服务器Socket实例的唯一性,观察者模式用于通知文件上传完成后的后续处理等。 以上就是使用Java ...
Socket网络编程是网络通信的基础,尤其在开发涉及服务器与客户端交互的应用时,如文件上传和下载功能。在这个场景中,我们将深入探讨如何使用Java的Socket API实现文件的上传和下载功能。 TCP(Transmission ...
在这个"Socket编程文件上传源代码案例"中,我们将深入探讨如何利用Socket和IO流技术来实现在TCP网络上的文件上传功能。 首先,我们需要理解Socket的概念。Socket是操作系统提供的一种进程间通信(IPC)机制,它为...
在Python中,socket可以用来实现实时的文件上传和下载。文件传输通常涉及到二进制数据的处理,因此需要使用`socket.sendall()`发送整个文件,而不是逐字符发送。接收端则需要正确地接收并保存文件。注意,由于网络的...
在Android平台上,Socket通信是一种常见的网络编程方式,用于设备间的双向数据传输。Socket提供了一种可靠的、基于连接的传输层通信机制,适用于文件的上传和下载。本篇将详细讲解如何在Android应用中使用Socket进行...
标题中的“通过Socket...总结来说,Socket文件传输涉及到网络编程的基本原理,包括TCP连接的建立、数据的分块传输以及连接的关闭。通过源代码实例,我们可以深入理解这个过程,并学习如何在实际项目中应用这些技术。
总的来说,这个"socket文件上传代码"示例展示了如何使用Java的Socket编程技术来实现跨服务器的文件传输,对于理解网络编程和文件上传有很好的实践价值。通过对这部分代码的学习,开发者可以提升自己在网络通信和文件...
在本示例中,"Socket实现文件上传下载,含多线程" 提到了通过Socket在客户端和服务器之间进行文件传输,并且服务器端采用了多线程处理连接请求,提高了服务的并发能力。下面我们将详细探讨相关的知识点。 1. **...
总的来说,这个项目提供了一个基础的Socket文件传输模型,通过实践可以加深对Java网络编程的理解,为构建更复杂的应用,如聊天室、文件共享系统等打下坚实基础。对于开发者来说,熟练掌握Socket编程不仅可以增强解决...
Socket编程是计算机网络编程中的重要组成部分,主要用于...通过上述内容,我们了解了Socket在文件上传下载中的应用。在实际项目中,开发者需要根据具体需求对这些步骤进行封装和优化,以实现高效、可靠的文件传输功能。
本项目“java-socket大文件上传-含客户端和服务端”旨在演示如何利用Java Socket API来实现大文件的上传功能,这对于网络应用如文件分享、云存储服务等至关重要。 首先,我们要理解Socket的工作原理。Socket是一种...
通过本文的介绍,我们可以了解到使用 Socket 实现文件上传下载的基本原理和步骤。这种实现方式适用于简单的文件传输需求。对于更复杂的场景,如大文件传输、断点续传等,可能需要考虑更高级的技术方案,例如使用 ...
通过学习和实践“华农网络编程socket通信”课程,学生可以掌握网络通信的核心技术,为开发各种网络应用打下坚实基础。在实际项目中,理解并灵活运用Socket编程能够解决许多网络通信问题,提升系统的稳定性和效率。
三、Socket文件上传工具类设计 1. 客户端: - 创建Socket连接:`Socket socket = new Socket(serverIP, serverPort);` - 打开本地文件:`FileInputStream fis = new FileInputStream(file);` - 发送文件:通过...
在本文中,我们将深入探讨如何使用C#进行Socket编程,特别是在实现定时批量上传文件到服务器的应用场景中。C#作为微软开发的面向对象的编程语言,具有强大的网络编程能力,Socket编程是其在网络通信中的核心部分。让...
在这个主题中,我们主要关注两个关键的编程接口:Socket和WinInet,它们是Windows操作系统中用于实现网络应用的重要工具。 Socket,通常被称为套接字,是网络通信的基础。它是一个编程接口(API),允许应用程序...
在这个“安卓使用socket上传文件demo”中,我们将深入探讨如何利用Socket在安卓应用中实现文件上传功能。 首先,让我们了解Socket的基本概念。Socket是网络通信的基础,它允许两个网络端点(通常是服务器和客户端)...
超大文件上传通常面临两个主要挑战:内存管理及连接稳定性。对于内存管理,一次性加载整个4GB文件到内存是不切实际的,因为这可能导致“out of memory”错误。为了解决这个问题,我们需要采用流式传输(streaming)...