网络编程 几个根本的类
1 几个常用类的使用:
public static void main(String[] args) { try { // InetAddress 类 代表网上 ip地址或者域名 InetAddress address = InetAddress.getLocalHost(); System.out.println("hostAddress: " + address.getHostAddress()); // hostAddress: 192.168.11.23 System.out.println("hostName: " + address.getHostName()); // hostName: USER-20161008VQ 可以计算机 右键-属性 看到 计算机名 address = InetAddress.getByName("www.baidu.com"); System.out.println("hostAddress: " + address.getHostAddress()); // hostAddress: 220.181.112.244 System.out.println("hostName: " + address.getHostName()); // hostName: www.baidu.com 可以计算机 右键-属性 看到 计算机名 address = InetAddress.getByName("220.181.112.244"); System.out.println("hostAddress: " + address.getHostAddress()); // hostAddress: 220.181.112.244 System.out.println("hostName: " + address.getHostName());// hostName: 220.181.112.244 输出ip而不是域名。如果这个IP地 址不存在或DNS服务器不允许进行IP地址和域名的映射,getHostName方法就直接返回这个IP地址 // InetSocketAddress 代表网上 ip地址+端口 InetSocketAddress addr1 = new InetSocketAddress("127.0.0.1" , 9999) ; System.out.println(addr1.getHostName() + " port is: " + addr1.getPort() ); address = addr1.getAddress(); System.out.println(address.getHostAddress()); // URL类 try { URL url = new URL("http://www.baidu.com:80/index.html?uname=zm") ; System.out.println("协议:"+url.getProtocol()); // 协议:http System.out.println("域名:"+url.getHost()); // 域名:www.baidu.com System.out.println("端口:"+url.getPort());// 端口:80 System.out.println("资源:"+url.getFile()); // 资源:/index.html?uname=zm System.out.println("相对路径:"+url.getPath()); // 相对路径:/index.html System.out.println("锚点:"+url.getRef()); // 锚点:null 锚点就是# 如果是这个链接http://www.baidu.com:80/index.html#a?uname=zm 那么结果是锚点:a?uname=zm url.getQuery()结果是null System.out.println("参数:"+url.getQuery());// 参数:uname=zm } catch (MalformedURLException e) { e.printStackTrace(); } // 爬虫 使用 URL类的openStream() 实现从互联网服务器上下载文件 try { String line ; URL url = new URL("http://www.baidu.com/") ; BufferedReader br = new BufferedReader(new InputStreamReader(new BufferedInputStream(url.openStream()),"UTF-8")); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(new File("D:/baidu.html"))),"UTF-8")); while( null != (line = br.readLine()) ) { bw.append(line); bw.newLine(); } bw.flush(); bw.close(); br.close(); } catch (Exception e) { e.printStackTrace(); } } catch (UnknownHostException e) { e.printStackTrace(); } }
2 UDP(User Data Protocol,用户数据报协议) 基本使用的类:
数据去找服务器端
服务端: /** * 服务端 客户端和服务器端都是使用同样的类和封装数据的类 只不过使用的方法不同 DatagramSocket(客户端服务端类) + DatagramPacket(封装数据的类) * 1、创建服务端 +端口 * 2、准备接受容器 * 3、封装成 包 * 4、接受数据 * 5、分析数据 字节数组-->double * 6、释放 * @author Administrator * */ public class Server { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //1、创建服务端 +端口 DatagramSocket server = new DatagramSocket(8888); //2、准备接受容器 byte[] container = new byte[1024]; //3、封装成 包 DatagramPacket(byte[] buf, int length) DatagramPacket packet =new DatagramPacket(container, container.length) ; //4、接受数据 打开通道 接收数据到 packet中 server.receive(packet); //5、分析数据 //byte[] data = packet.getData(); //int len = packet.getLength(); //System.out.println(new String(data,0,len)); double data =convert(packet.getData()); System.out.println(data); //6、释放 server.close(); } /** * 字节数组 +Data 输入流 * @param data * @return * @throws IOException */ public static double convert(byte[] data) throws IOException{ DataInputStream dis =new DataInputStream(new ByteArrayInputStream(data)); double num =dis.readDouble(); dis.close(); return num; } } 客户端: /** * 客户端 * 1、创建客户端 +端口 * 2、准备数据 double -->字节数组 字节数组输出流 * 3、打包(发送的地点 及端口) * 4、发送 * 5、释放 B/S架构: 服务器上的内容通过IO下载到浏览器 ,浏览器相当于一个大大客户端,是基于tcp ftp协议通讯 C/S架构: 自由定制 自己开发 * * * @author Administrator * */ public class Client { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { //1、创建客户端 +端口 DatagramSocket client = new DatagramSocket(6666); //2、准备数据 double num =89.12; byte[] data =convert(num); //3、打包(发送的地点 及端口) DatagramPacket(byte[] buf, int length, InetAddress address, int port) DatagramPacket packet = new DatagramPacket(data,data.length,new InetSocketAddress("localhost",8888)); //4、发送 client.send(packet); //5、释放 client.close(); } /** * 字节数组 数据源 +Data 输出流 * @param num * @return * @throws IOException */ public static byte[] convert(double num) throws IOException{ byte[] data =null; ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream dos =new DataOutputStream(bos); // 将数据写到字节输出流中 但是不落地到目标文件中 dos.writeDouble(num); dos.flush(); //获取数据 data = bos.toByteArray(); dos.close(); return data; } }