`

34、TCP并发上传,URL

阅读更多

一、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

 

  1. 类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。
  2. 资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询。
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

 

  1. 抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接。
  2. 此类的实例可用于读取和写入此 URL 引用的资源
  3. 通常,创建一个到 URL 的连接需要几个步骤
  4. 通过在 URL 上调用 openConnection 方法创建连接对象。 
  5. 处理设置参数和一般请求属性。 
  6. 使用 connect 方法建立到远程对象的实际连接。 
  7. 远程对象变为可用。远程对象的头字段和内容变为可访问
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);
		}
	}
}

 

分享到:
评论

相关推荐

    bbs.rar_C# TCP 图片_tcp 图片_txtbbs论坛

    图片的上传和显示则涉及到文件存储、URL路由、HTTP请求等Web开发的基本概念,开发者可能需要使用到ASP.NET框架来构建服务器端逻辑。 此外,为了优化图片的传输速度和降低带宽消耗,可能会采用压缩图片、使用WebP等...

    向目标URL发起post

    3. **性能优化**:对于高并发访问的场景,需要考虑并发控制和资源管理。 #### 五、总结 通过上述分析,我们不仅了解了如何使用C#向目标URL发起POST请求的具体实现细节,还深入学习了HTTP协议的基础知识。这对于...

    ApacheBench压力并发测试

    这个小巧的命令行工具可以模拟多个并发用户请求,以此来测量服务器处理这些请求的能力。在【描述】中提到的"ab.exe纯文件",意味着你已经得到了一个独立的可执行文件,无需安装Apache HTTP服务器,即可直接运行压力...

    C#高性能大容量SOCKET并发完成端口源码

    【标题】"C#高性能大容量SOCKET并发完成端口源码"涉及到的关键技术是C#编程语言在处理网络通信时的高性能优化,特别是利用I/O完成端口(IOCP,Input/Output Completion Port)来实现高并发的Socket通信。在多线程...

    STM32+LWIP+OS http下载文件C语言实现

    为了确保任务的并发执行,操作系统在这里起着关键作用。你可以创建一个任务专门负责发送HTTP请求,另一个任务则处理接收和保存文件。任务间的通信可以通过消息队列、信号量或共享内存等方式实现。实时操作系统将根据...

    C++ tcpclient

    这个库提供了丰富的功能,如URL解析、SSL加密、自动重定向、cookies和文件上传下载等。在本项目中,libcurl库被用来简化TCP客户端的网络通信,提供了一种统一的方式来发起和管理TCP连接,同时处理网络I/O和错误处理...

    http下载和上传文件 c++ 封装类

    7. **多线程支持**:为了并发处理多个HTTP请求,类可能会支持多线程或异步操作,这样可以在不阻塞主线程的情况下同时进行上传和下载。 8. **缓存策略**:对于重复请求,类可以实现简单的缓存策略,避免不必要的网络...

    C#编写的Http服务端

    1. **Socket编程**:Socket是网络通信的基本单元,C#中的System.Net.Sockets命名空间提供了TcpListener和TcpClient类,用于监听和建立TCP连接。Http服务端需要监听特定端口(如80或8080),并通过TcpListener来接收...

    okHttp 多图片上传(含服务器代码)--来自CSDN

    4. **高效的请求调度**:OkHttp 使用线程池管理和调度请求,避免大量并发导致的资源浪费。 ### 多图片上传策略 多图片上传通常涉及到以下步骤: 1. **图片选择**:用户通过相册或相机选择多张图片。 2. **图片...

    java 网络编程那一章的所有代码 可以加深基础

    通过`URLConnection`,你可以读取或写入远程资源,例如下载网页或者上传数据。了解URL的构造、解析以及如何通过URL进行HTTP请求,对于进行网络数据交换至关重要。 其次,Socket是Java网络编程中的另一重要组件,它...

    Android-基于retrofit2和okhttp3的一个上传和下载库

    - **线程安全**:OkHttp是线程安全的,可以在多个线程中并发使用。 3. **上传与下载** - **上传**:在Retrofit中,通过`@Multipart`注解创建接口,然后使用`@Part`注解指定上传的字段。可以上传文件、图片或其他...

    ftp实现上传

    在编程中实现FTP功能,可以使用各种编程语言的FTP库,如Python的`ftplib`,Java的`java.net.Socket`和`java.net.URL`,或者.NET框架的`System.Net.FtpWebRequest`。这些库提供了API,简化了FTP命令的发送和响应的...

    Java-Java网络编程教程

    - 实现FTP文件上传下载 - 使用HTTP协议获取网页内容 - 开发基于WebSocket的实时通信应用 通过本Java网络编程教程,你将能学习到如何使用Java进行网络通信,开发出自己的网络应用。所提供的视频教程资源将更直观地...

    c#网络应用编程

    2. URI与URL:统一资源标识符(URI)是网络资源的唯一地址,URL是其子集,用于定位Web资源。在C#中,Uri类用于处理URI。 二、网络通信协议 1. HTTP(超文本传输协议):用于Web应用,C#中的HttpWebRequest和...

    《Java网络编程(第4版)》.((美)Elliotte Rusty Harold).[PDF]@ckook.pdf

    8. 并发编程工具:Java提供了丰富的并发编程工具,如ExecutorService、Future、Callable等,这些工具可以帮助开发者更有效地管理和控制并发任务。 9. 网络异常处理:在进行网络编程时,错误和异常是常有的事。书中...

    OkHttpUtils工具类

    OkHttp是由Square公司开发的一款高效的网络通信库,它以其低延迟、高并发和强大的缓存机制著称,被广泛应用在Android开发中。下面我们将深入探讨OkHttp3的基本概念、特性以及OkHttpUtils工具类如何利用这些特性来...

    Java程序设计之网络编程基础教程课件

    - 文件传输:使用Socket实现客户端和服务器之间的文件上传下载。 - 简单聊天室:利用ServerSocket接收多个客户端连接,实现多人聊天功能。 - Web服务器:模拟简单的HTTP服务器,响应客户端的GET请求。 通过本...

    NetWorkDemo

    9. 文件传输:在实际应用中,网络编程常用于文件的上传和下载。NetWorkDemo可能演示了如何通过网络传输大文件,以及断点续传等高级功能。 10. 网络安全:网络通信涉及到数据的安全性,如加密传输、身份验证等。...

    Tornado上传和下载文件(以CSV文件为例).7z

    Tornado基于AsyncIO,确保了高效的并发处理能力。 2. **文件上传** 在Tornado中,文件上传主要依赖于`HTTPRequest`对象中的`files`属性。用户通过HTML表单的`<input type="file">`字段选择文件后,服务器端可以...

    java技能百练--网络篇

    URL(统一资源定位符)是互联网上资源的唯一标识,而URLConnection是Java通过URL访问网络资源的接口。通过建立URLConnection对象,可以读取或写入远程资源,进行HTTP、FTP等协议的交互。 4. **NIO(非阻塞I/O)**...

Global site tag (gtag.js) - Google Analytics