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);
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值