首页 / JAVA / java高薪之路__009_网络
java高薪之路__009_网络
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java高薪之路__009_网络,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5838字,纯文字阅读大概需要9分钟。
内容图文
1. InetAddress类
2. Socket: IP地址和端口号的结合,socket允许程序把网络连接当成一个流,数据在两个socket间通过IO传输, 通信的两端都要有socket. 主动发起通信请求的是客户端,等待通信请求的是服务端
3. DatagramSocket 和 DatagramPacket实现了UDP协议网络程序, 使用DatagramSocket发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达
DatagramPacket对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号,给出了完整的地址信息,因此无须建立发送方和接收方的连接
4. URL类
URL u = new URL("http://www.baidu.com");
InputStream in = u.openStream();
URLConnection uc = u.openConnection();
uc.getInputStream();
uc.getOutputSteam();
1 package learn.JavaBasics.Class; 2 3 import java.io.*; 4import java.net.InetAddress; 5import java.net.ServerSocket; 6import java.net.Socket; 7import java.net.UnknownHostException; 8 9publicclass SocketDemo { 10publicvoid server() { 11 ServerSocket ss = null; 12 Socket s = null; 13 InputStream in = null; 14 OutputStream out = null; 15 16try { 17//开始在端口监听 18 ss = new ServerSocket(9999); 19 20//当有连接进来时,会新建一个socket 21 s = ss.accept(); 22 23//获取输入流 24 in = s.getInputStream(); 25 26//对输入流进行处理 27byte[] b = newbyte[1024]; 28int len; 29 String msg = ""; 30 31while((len=in.read(b)) != -1) { 32 msg = new String(b, 0, len); 33 } 34 35 System.out.println("The message from "+ s.getInetAddress().getHostName()+ 36 "(ip:"+ s.getInetAddress().getHostAddress()+") is: \""+msg+"\""); 37 38 39//获取输出流,反馈信息 40 out = s.getOutputStream(); 41 out.write("The msg from client has been received".getBytes()); 42 } catch (IOException e) { 43// TODO Auto-generated catch block 44 e.printStackTrace(); 45 } finally { 46if (in != null) { 47try { 48 in.close(); 49 } catch (IOException e) { 50// TODO Auto-generated catch block 51 e.printStackTrace(); 52 } 53 } 54 55if (s != null) { 56try { 57 s.close(); 58 } catch (IOException e) { 59// TODO Auto-generated catch block 60 e.printStackTrace(); 61 } 62 } 63 64if (ss != null) { 65try { 66 ss.close(); 67 } catch (IOException e) { 68// TODO Auto-generated catch block 69 e.printStackTrace(); 70 } 71 } 72 73if (out != null) { 74try { 75 out.close(); 76 } catch (IOException e) { 77// TODO Auto-generated catch block 78 e.printStackTrace(); 79 } 80 } 81 } 82 } 83 84publicvoid client() { 85 Socket s = null; 86 OutputStream out = null; 87 InputStream in = null; 88 89try { 90//新建一个Socket 91 s = new Socket(InetAddress.getLocalHost(), 9999); 92 93//获取输出流 94 out = s.getOutputStream(); 95 96//发送信息, 并提示 97 out.write("This is client".getBytes()); 98 System.out.println("client message has sent"); 99100//这句话存在的原因是,Server端的getInputSream流的read方法是阻塞, 它在接收信息,但不知道信息是否接收完全,所以一直在等待, 101//所以Server端的反馈信息无发发送过来,程序死掉, 102//这里显式的通知Server,发送结束 103//FileInputSteam里的read方法与这个一样,但BufferInputSteam里的read方法是非阻塞的104 s.shutdownOutput(); 105106//获取输入流,接收服务端的反馈信息107 in = s.getInputStream(); 108109byte[] b = newbyte[1024]; 110int len; 111 String msg = ""; 112113while((len=in.read(b)) != -1) { 114 msg = new String(b, 0, len); 115 } 116 System.out.println("Response from Server: "+msg); 117 System.out.println("connection over"); 118119//这里的后边没有了,所以服务端可以不显式的提示,不影响功能120 } catch (IOException e) { 121// TODO Auto-generated catch block122 e.printStackTrace(); 123 } finally { 124if (out != null) { 125try { 126 out.close(); 127 } catch (IOException e) { 128// TODO Auto-generated catch block129 e.printStackTrace(); 130 } 131 } 132if (s != null) { 133try { 134 s.close(); 135 } catch (IOException e) { 136// TODO Auto-generated catch block137 e.printStackTrace(); 138 } 139 } 140141if (in != null) { 142try { 143 in.close(); 144 } catch (IOException e) { 145// TODO Auto-generated catch block146 e.printStackTrace(); 147 } 148 } 149 } 150 } 151152publicstaticvoid main(String[] args) { 153new Thread(new Runnable(){ 154 @Override 155publicvoid run() { 156// TODO Auto-generated method stub157new SocketDemo().server(); 158 } 159 }).start(); 160161new Thread(new Runnable() { 162 @Override 163publicvoid run() { 164// TODO Auto-generated method stub165new SocketDemo().client(); 166 } 167 }).start(); 168 } 169170 }
1 package learn.JavaBasics.Class; 2 3 import java.io.IOException; 4 import java.net.DatagramPacket; 5 import java.net.DatagramSocket; 6 import java.net.InetAddress; 7 import java.net.SocketException; 8 import java.net.UnknownHostException; 9 10 public class TestUDP { 11 public void receive(){ 12 DatagramSocket ds = null; 1314try { 15//定义接收的数据报大小16byte[] b = newbyte[1024]; 17 DatagramPacket packet = new DatagramPacket(b, 0, b.length); 1819//定义一个接收的Socket,用于在特定的端口接收指定大小的数据报20 ds = new DatagramSocket(9999); 21 ds.receive(packet); 2223 String str = new String(packet.getData(), 0, packet.getLength()); 2425 System.out.println(str); 26 } catch (SocketException e) { 27// TODO Auto-generated catch block28 e.printStackTrace(); 29 } catch (IOException e) { 30// TODO Auto-generated catch block31 e.printStackTrace(); 32 } finally { 33if (ds != null) { 34 ds.close(); 35 } 36 } 37 } 3839publicvoid send() { 40 DatagramSocket ds = null; 4142try { 43//新建一个用于发送的Socket44 ds = new DatagramSocket(); 4546//数据47byte[] b = "你好, 这里是发送端的数据, UDP sender".getBytes(); 4849//封装数据到数据报中, 一个数据报不能大于64K, 记录着数据信息, 两端的IP和端口号50 DatagramPacket packet = new DatagramPacket(b, 0, b.length, InetAddress.getLocalHost(), 9999); 5152//使用Socket把数据报发走53 ds.send(packet); 54 } catch (SocketException e) { 55// TODO Auto-generated catch block56 e.printStackTrace(); 57 } catch (UnknownHostException e) { 58// TODO Auto-generated catch block59 e.printStackTrace(); 60 } catch (IOException e) { 61// TODO Auto-generated catch block62 e.printStackTrace(); 63 } finally { 64if (ds != null) { 65 ds.close(); 66 } 67 } 68 } 6970publicstaticvoid main(String[] args) { 71new Thread(new Runnable(){ 72 @Override 73publicvoid run() { 74new TestUDP().receive(); 75 } 76 }).start(); 7778new Thread(new Runnable(){ 79 @Override 80publicvoid run() { 81new TestUDP().send(); 82 } 83 }).start(); 84 } 85 }
原文:http://www.cnblogs.com/hangtt/p/4855290.html
内容总结
以上是互联网集市为您收集整理的java高薪之路__009_网络全部内容,希望文章能够帮你解决java高薪之路__009_网络所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。
来源:【匿名】