不多说,先上代码,代码的注释写的已经挺详细的了
1 //URL:统一资源定位符,一个URL的对象,对应着互联网上的一个资源。 2 //我们可以通过URL的对象调用其相应的方法,将此资源读取(即所谓的“下载”) 3 public class TestURL { 4 //看URL下有哪些常用的方法 5 @Test 6 public void Testurl() throws MalformedURLException{ 7 //1.创建一个URL的对象 8 //参数部分可以传入一个网址的绝对路径,这里我传人的是我写的一篇博客的地址 9 URL url = new URL("http://www.cnblogs.com/gode/p/5812013.html");10 11 //获取该URL的协议名12 System.out.println(url.getProtocol());//http13 //获取该URL的主机名14 System.out.println(url.getHost());//www.cnblogs.com15 //获取该URL的端口号16 System.out.println(url.getPort());//-117 //获取该URL的文件路径18 System.out.println(url.getPath());// /gode/p/5812013.html19 //获取该URL的文件名20 System.out.println(url.getFile());// /gode/p/5812013.html21 //获取该URL在文件中的相对位置22 System.out.println(url.getRef());//null23 //获取该URL的查询名24 System.out.println(url.getQuery());//null25 }
很好奇会打印出什么东西呢
1 //如何将服务端的资源读取进来 2 @Test 3 public void Testurl1() throws Exception{ 4 //1.创建一个URL的对象 5 //参数部分可以传入一个网址的绝对路径,这里我传人的是我写的一篇博客的地址 6 URL url = new URL("http://www.cnblogs.com/gode/p/5812013.html"); 7 8 //2.URL读入的方法是openStream 9 InputStream is = url.openStream();10 11 //3.打印到控制台上试试12 byte[] b = new byte[1024];13 int length;14 while((length = is.read(b)) != -1){15 String str = new String(b,0,length);16 System.out.print(str);//这里输出的是页面布局的HTML代码,对应的汉字还有些是乱码17 }18 }
下面就是打印出来的东西
1 2 3 4 5浣跨敤UDP杩涜鏁版嵁鍙戦?佺殑瀹炰緥涓? - Hello.World! - 鍗氬鍥? 6 7 8 9 10 11 12 13 14 15 16 17 18 1920204 2052154 5522 23 24 2532 53Hello.World!
26 27 28 29 30 3156197 198 20357177 17858 5917660 611456214463141 142 14364 浣跨敤UDP杩涜鏁版嵁鍙戦?佺殑瀹炰緥涓? 65
66 6768139 140127 128棣栧厛濡傛灉TCP瀛﹁繃浠ュ悗锛屽啀鐪婾DP杩涜鏁版嵁浼犺緭涔熸槸澶у悓灏忓紓鐨勶紝鍙槸鐢ㄥ埌鐨勭被涓嶅悓
69UDP杩涜浼犺緭闇?瑕丏ataSocket鍜孌atapacket绫伙紝Datapacket鍙暟鎹姤锛屾瘡涓?涓暟鎹姤涓嶈兘澶т簬64k锛岄兘璁板綍鐫?鏁版嵁淇℃伅锛屽彂閫佺鐨処P銆佺鍙e彿锛?
70浠ュ強瑕佸彂閫佸埌鐨勬帴鏀剁鐨処P銆佺鍙e彿銆?
71UDP杩涜浼犺緭鏄皢鏁版嵁鍏ㄩ儴鎵撳寘锛岀劧鍚庝竴璧峰彂杩囧幓锛屽鏄撻?犳垚鏁版嵁涓㈠け锛屼絾閫熷害杈冨揩锛屾瘮濡傝涓嬭浇涓?涓數褰憋紝缂哄け鍑犱睛骞舵病鏈変粈涔堝奖鍝嶏紝浣嗛渶瑕佸揩閫熶笅杞斤紝杩欎釜鏃跺?欏彲浠ラ?夋嫨UDP杩涜浼犺緭锛屾墍璋撳悇鏈夋墍闀匡紝鍏蜂綋閫夋嫨閭g鏂瑰紡杩樻槸瑕佺湅鍏蜂綋闇?瑕併??
72鎺ヤ笅鏉ラ檮鍔犱竴涓猆DP杩涜鏂囧瓧浼犺緭锛岀劧鍚庢帴鏀剁鎵撳嵃鍒版帶鍒跺彴涓?
73741261 package com.UDP.java; 75 2 76 3 import java.io.IOException; 77 4 import java.net.DatagramPacket; 78 5 import java.net.DatagramSocket; 79 6 import java.net.InetAddress; 80 7 import org.junit.Test; 81 8 82 9 public class TestUDP { 83 10 // 鍙戦?佺 84 11 @Test 85 12 public void send() { 86 13 DatagramSocket ds = null; 87 14 try { 88 15 ds = new DatagramSocket(); 89 16 // 鍒涘缓涓?涓暟鎹姤锛屾瘡涓?涓暟鎹姤涓嶈兘澶т簬64k锛岄兘璁板綍鐫?鏁版嵁淇℃伅锛屽彂閫佺鐨処P銆佺鍙e彿锛屼互鍙婅鍙戦?佸埌 90 17 // 鐨勬帴鏀剁鐨処P銆佺鍙e彿銆? 91 18 byte[] b = "鎴戞槸鍙戦?佺".getBytes(); 92 19 DatagramPacket pack = new DatagramPacket(b, 0, b.length, 93 20 InetAddress.getByName("192.168.1.101"), 9090); 94 21 ds.send(pack); 95 22 } catch (IOException e) { 96 23 e.printStackTrace(); 97 24 } finally { 98 25 if (ds != null) { 99 26 ds.close();100 27 }101 28 }102 29 }103 30 104 31 // 鎺ユ敹绔?105 32 @Test106 33 public void receive() {107 34 DatagramSocket ds = null;108 35 try {109 36 ds = new DatagramSocket(9090);110 37 byte[] b = new byte[1024];111 38 DatagramPacket pack = new DatagramPacket(b, 0, b.length);112 39 ds.receive(pack);113 40 String str = new String(pack.getData(), 0, pack.getLength());114 41 System.out.println(str);115 42 }catch (IOException e) {116 43 e.printStackTrace();117 44 }118 45 finally{119 46 if(ds != null){120 47 ds.close();121 48 }122 49 }123 50 }124 51 }125
129 130 131136 137 138132133 134 135146 147 148173 174 175 149 150 151 152 153 154 155 156 157 158 172179195 196180 181 182194183186 187 188 189鍏憡
184 185190 191192 193
而教程中,使用Tomcat服务器,URL地址指定的是一个txt文档,启动Tomcat,可以将该txt文档中的内容打印出来
分析:这个URL所指的地址被封装了,不能直接找到服务器的文档(ps:如果能的话那岂不是乱套了,服务器里存储的东西想看就看)
如果此文件非文本文件呢?
我要将此文件写入本地,使用url.openConnection()方法,返回一个URLConnection的对象
具体代码如下
1 //如果既有数据的读入,又有数据的输出,就要考虑使用URLConnection 2 URLConnection urlConnection = url.openConnection(); 3 InputStream is1 = urlConnection.getInputStream(); 4 //之前打印已经发现是HTML类型的文件了,所以在这里定义成一个.html类型的文件,看看效果如何 5 FileOutputStream fos = new FileOutputStream(new File("aaa.html")); 6 byte[] b1 = new byte[1024]; 7 int length1; 8 while((length1 = is1.read(b1)) != -1){ 9 fos.write(b1, 0, length1);10 }11 fos.close();12 is1.close();
激动人心的时刻到了,打印出来的HTML文件真的是HTML文件,具体内容如下(没有乱码了)
1 2 3 4 5使用UDP进行数据发送的实例一 - Hello.World! - 博客园 6 7 8 9 10 11 12 13 14 15 16 17 18 1920204 2052154 5522 23 24 2532 53Hello.World!
26 27 28 29 30 3156197 198 20357177 17858 5917660 61145 173 174 1756214463141 142 14364 使用UDP进行数据发送的实例一 65
66 6768139 140127 128首先如果TCP学过以后,再看UDP进行数据传输也是大同小异的,只是用到的类不同
69UDP进行传输需要DataSocket和Datapacket类,Datapacket叫数据报,每一个数据报不能大于64k,都记录着数据信息,发送端的IP、端口号,
70以及要发送到的接收端的IP、端口号。
71UDP进行传输是将数据全部打包,然后一起发过去,容易造成数据丢失,但速度较快,比如要下载一个电影,缺失几侦并没有什么影响,但需要快速下载,这个时候可以选择UDP进行传输,所谓各有所长,具体选择那种方式还是要看具体需要。
72接下来附加一个UDP进行文字传输,然后接收端打印到控制台上
73741261 package com.UDP.java; 75 2 76 3 import java.io.IOException; 77 4 import java.net.DatagramPacket; 78 5 import java.net.DatagramSocket; 79 6 import java.net.InetAddress; 80 7 import org.junit.Test; 81 8 82 9 public class TestUDP { 83 10 // 发送端 84 11 @Test 85 12 public void send() { 86 13 DatagramSocket ds = null; 87 14 try { 88 15 ds = new DatagramSocket(); 89 16 // 创建一个数据报,每一个数据报不能大于64k,都记录着数据信息,发送端的IP、端口号,以及要发送到 90 17 // 的接收端的IP、端口号。 91 18 byte[] b = "我是发送端".getBytes(); 92 19 DatagramPacket pack = new DatagramPacket(b, 0, b.length, 93 20 InetAddress.getByName("192.168.1.101"), 9090); 94 21 ds.send(pack); 95 22 } catch (IOException e) { 96 23 e.printStackTrace(); 97 24 } finally { 98 25 if (ds != null) { 99 26 ds.close();100 27 }101 28 }102 29 }103 30 104 31 // 接收端105 32 @Test106 33 public void receive() {107 34 DatagramSocket ds = null;108 35 try {109 36 ds = new DatagramSocket(9090);110 37 byte[] b = new byte[1024];111 38 DatagramPacket pack = new DatagramPacket(b, 0, b.length);112 39 ds.receive(pack);113 40 String str = new String(pack.getData(), 0, pack.getLength());114 41 System.out.println(str);115 42 }catch (IOException e) {116 43 e.printStackTrace();117 44 }118 45 finally{119 46 if(ds != null){120 47 ds.close();121 48 }122 49 }123 50 }124 51 }125
129 130 131136 137 138132133 134 135179195 196180 181 182194183186 187 188 189公告
184 185190 191192 193