一、TCP并发上传任意文件
服务器端要用到多线程技术
import java.io.*; import java.net.*; class Client { public static void main(String[] args)throws Exception { //创建客户端的socket服务,指定目的主机和端口 Socket s = new Socket("192.168.0.253",10000); FileInputStream fis = new FileInputStream("e:/装机软件_29001.zip"); BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream())); OutputStream os = s.getOutputStream(); byte[] buf = new byte[1024]; int len = 0; while((len = fis.read(buf))!=-1) { os.write(buf,0,len); } //加上结束标记 s.shutdownOutput(); String res = brIn.readLine(); System.out.println(res); s.close(); fis.close(); } } class Server { public static void main(String[] args)throws Exception { ServerSocket ss = new ServerSocket(10000); while(true) { Socket s = ss.accept(); new Thread(new Method(s)).start(); } } } class Method implements Runnable { Socket s; Method(Socket s) { this.s = s; } public void run() { int count = 0; try { String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+" 连接...."); InputStream is = s.getInputStream(); File file = new File("d:/a.zip"); while(file.exists()) file = new File("d:/a"+(count++)+".zip"); FileOutputStream fos = new FileOutputStream(file); BufferedWriter bwOut = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); byte[] buf = new byte[1024]; int len = 0; while((len=is.read(buf))!=-1) { fos.write(buf,0,len); } bwOut.write("上传成功"); bwOut.newLine(); bwOut.flush(); s.close(); } catch (Exception e) { System.out.println("上传失败"); } } }
二、URL
- 类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。
- 资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
public final class URL implements Serializable { //根据 String 表示形式创建 URL 对象 public URL(String spec)throws MalformedURLException{} //获取与此 URL 关联协议的默认端口号 public int getDefaultPort(){} //获取此 URL 的文件名。返回的文件部分将与 getPath() 相同,再加上 getQuery() 值的规范化形式(如果有)。 public String getFile(){} //获取此 URL 的主机名(如果适用)。 public String getHost(){} //获取此 URL 的路径部分。 public String getPath(){} //获取此 URL 的端口号 public int getPort(){} //获取此 URL 的协议名称 public String getProtocol(){} //获取此 URL 的查询部分 public String getQuery(){} //返回一个 URLConnection 对象,它表示到 URL 所引用的远程对象的连接。 //每次调用此 URL 的协议处理程序的 openConnection 方法都打开一个新的连接。 public URLConnection openConnection() throws IOException{} }
import java.net.*; public class URLTest { public static void main(String[] args) throws MalformedURLException { URL url = new URL("http://pan.baidu.com/disk/home?dir/path=%2Fday24"); System.out.println(url.getHost());// pan.baidu.com System.out.println(url.getProtocol());// http System.out.println(url.getPort());// -1 System.out.println(url.getDefaultPort());// 80 System.out.println(url.getPath());// /disk/home System.out.println(url.getFile());// /disk/home?dir/path=%2Fday24 System.out.println(url.getQuery());// dir/path=%2Fday24 } }
三、URLConnection
- 抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。
- 此类的实例可用于读取和写入此 URL 引用的资源
- 通常,创建一个到 URL 的连接需要几个步骤
- 通过在 URL 上调用 openConnection 方法创建连接对象。
- 处理设置参数和一般请求属性。
- 使用 connect 方法建立到远程对象的实际连接。
- 远程对象变为可用。远程对象的头字段和内容变为可访问
public abstract class URLConnection { //打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。 public abstract void connect() throws IOException{} //返回从此打开的连接读取的输入流。 public InputStream getInputStream() throws IOException{} //返回写入到此连接的输出流。 public OutputStream getOutputStream() throws IOException{} }
import java.io.*; import java.net.*; public class URLTest { public static void main(String[] args) throws IOException { URL url = new URL("http://www.baidu.com"); URLConnection con = url.openConnection(); BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(),"utf-8")); String line = null; while((line=br.readLine())!=null) { System.out.println(line); } } }
相关推荐
图片的上传和显示则涉及到文件存储、URL路由、HTTP请求等Web开发的基本概念,开发者可能需要使用到ASP.NET框架来构建服务器端逻辑。 此外,为了优化图片的传输速度和降低带宽消耗,可能会采用压缩图片、使用WebP等...
3. **性能优化**:对于高并发访问的场景,需要考虑并发控制和资源管理。 #### 五、总结 通过上述分析,我们不仅了解了如何使用C#向目标URL发起POST请求的具体实现细节,还深入学习了HTTP协议的基础知识。这对于...
这个小巧的命令行工具可以模拟多个并发用户请求,以此来测量服务器处理这些请求的能力。在【描述】中提到的"ab.exe纯文件",意味着你已经得到了一个独立的可执行文件,无需安装Apache HTTP服务器,即可直接运行压力...
【标题】"C#高性能大容量SOCKET并发完成端口源码"涉及到的关键技术是C#编程语言在处理网络通信时的高性能优化,特别是利用I/O完成端口(IOCP,Input/Output Completion Port)来实现高并发的Socket通信。在多线程...
这个库提供了丰富的功能,如URL解析、SSL加密、自动重定向、cookies和文件上传下载等。在本项目中,libcurl库被用来简化TCP客户端的网络通信,提供了一种统一的方式来发起和管理TCP连接,同时处理网络I/O和错误处理...
7. **多线程支持**:为了并发处理多个HTTP请求,类可能会支持多线程或异步操作,这样可以在不阻塞主线程的情况下同时进行上传和下载。 8. **缓存策略**:对于重复请求,类可以实现简单的缓存策略,避免不必要的网络...
1. **Socket编程**:Socket是网络通信的基本单元,C#中的System.Net.Sockets命名空间提供了TcpListener和TcpClient类,用于监听和建立TCP连接。Http服务端需要监听特定端口(如80或8080),并通过TcpListener来接收...
4. **高效的请求调度**:OkHttp 使用线程池管理和调度请求,避免大量并发导致的资源浪费。 ### 多图片上传策略 多图片上传通常涉及到以下步骤: 1. **图片选择**:用户通过相册或相机选择多张图片。 2. **图片...
通过`URLConnection`,你可以读取或写入远程资源,例如下载网页或者上传数据。了解URL的构造、解析以及如何通过URL进行HTTP请求,对于进行网络数据交换至关重要。 其次,Socket是Java网络编程中的另一重要组件,它...
- **线程安全**:OkHttp是线程安全的,可以在多个线程中并发使用。 3. **上传与下载** - **上传**:在Retrofit中,通过`@Multipart`注解创建接口,然后使用`@Part`注解指定上传的字段。可以上传文件、图片或其他...
为了确保任务的并发执行,操作系统在这里起着关键作用。你可以创建一个任务专门负责发送HTTP请求,另一个任务则处理接收和保存文件。任务间的通信可以通过消息队列、信号量或共享内存等方式实现。实时操作系统将根据...
在编程中实现FTP功能,可以使用各种编程语言的FTP库,如Python的`ftplib`,Java的`java.net.Socket`和`java.net.URL`,或者.NET框架的`System.Net.FtpWebRequest`。这些库提供了API,简化了FTP命令的发送和响应的...
- 实现FTP文件上传下载 - 使用HTTP协议获取网页内容 - 开发基于WebSocket的实时通信应用 通过本Java网络编程教程,你将能学习到如何使用Java进行网络通信,开发出自己的网络应用。所提供的视频教程资源将更直观地...
2. URI与URL:统一资源标识符(URI)是网络资源的唯一地址,URL是其子集,用于定位Web资源。在C#中,Uri类用于处理URI。 二、网络通信协议 1. HTTP(超文本传输协议):用于Web应用,C#中的HttpWebRequest和...
8. 并发编程工具:Java提供了丰富的并发编程工具,如ExecutorService、Future、Callable等,这些工具可以帮助开发者更有效地管理和控制并发任务。 9. 网络异常处理:在进行网络编程时,错误和异常是常有的事。书中...
OkHttp是由Square公司开发的一款高效的网络通信库,它以其低延迟、高并发和强大的缓存机制著称,被广泛应用在Android开发中。下面我们将深入探讨OkHttp3的基本概念、特性以及OkHttpUtils工具类如何利用这些特性来...
- 文件传输:使用Socket实现客户端和服务器之间的文件上传下载。 - 简单聊天室:利用ServerSocket接收多个客户端连接,实现多人聊天功能。 - Web服务器:模拟简单的HTTP服务器,响应客户端的GET请求。 通过本...
9. 文件传输:在实际应用中,网络编程常用于文件的上传和下载。NetWorkDemo可能演示了如何通过网络传输大文件,以及断点续传等高级功能。 10. 网络安全:网络通信涉及到数据的安全性,如加密传输、身份验证等。...
Tornado基于AsyncIO,确保了高效的并发处理能力。 2. **文件上传** 在Tornado中,文件上传主要依赖于`HTTPRequest`对象中的`files`属性。用户通过HTML表单的`<input type="file">`字段选择文件后,服务器端可以...
URL(统一资源定位符)是互联网上资源的唯一标识,而URLConnection是Java通过URL访问网络资源的接口。通过建立URLConnection对象,可以读取或写入远程资源,进行HTTP、FTP等协议的交互。 4. **NIO(非阻塞I/O)**...