1.IP地址
IP:
定义网络上的节点,节点的地址,手机,ipad,电脑,服务器...
IPV4 ,IPV6
127.0.0.1 本机IP
localhost 域名
192.168.0.0 ~192.168.255.255 非注册ip ,共组织使用的私人IP net 包 InetAddress 表示网络中的ip public class NetDemo02 { public static void main(String[] args) throws UnknownHostException { //static InetAddress getByName(String host) //决定了IP地址的主机,主机的名字。 //static InetAddress getLocalHost() InetAddress ip1 = InetAddress.getLocalHost();//返回本地主机的地址。 InetAddress ip2 = InetAddress.getByName("www.shsxt.com");//返回网站的地址 System.out.println(ip2); //DESKTOP-P04TCL5/192.168.4.154 www.shsxt.com/123.56.138.186 //getHostName() //这个IP地址的主机名。 System.out.println(ip2.getHostAddress()); //123.56.138.186 System.out.println(ip2.getHostName()); } }
2.端口
端口 : 区分软件
0~65535 2个字节
注意:
统一协议下端口号不能冲突
建议使用8000以上的端口号,8000以内成为预留端口号
常见 端口号: 80 http 8080 tomcat 3306 mysql 1521 oracle InetSocketAddress : 这个类实现了一个IP套接字地址(IP地址+端口号) public class PortDemo03 { public static void main(String[] args) { //InetSocketAddress(String hostname, int port) //创建一个套接字地址的主机名和端口号。 InetSocketAddress address = new InetSocketAddress("127.0.0.1",8888); System.out.println(address); //getHostName() //getPort() System.out.println(address.getHostString()); System.out.println(address.getAddress()); System.out.println(address.getPort()); } }
3.URL
URL : 统一资源定位符
是互联网的三大基石之一: html http url
协议 域名 端口 资源 http://www.baidu.com:80/index.html?uname=zhangsan&pwd=123#a URL : 类 URL代表一个统一资源定位符,一个指向万维网上的“资源”。
protocol://userInfo@host:port/path?query#fragment
协议://用户信息@主机名:端口/路径?查询#锚点
public class URLDemo04 { public static void main(String[] args) throws MalformedURLException { //URL(String spec) URL url = new URL("http://www.baidu.com:80/index.html?uname=zhangsan&pwd=123#a"); System.out.println(url); System.out.println("协议:"+url.getProtocol()); System.out.println("域名:"+url.getHost()); System.out.println("端口:"+url.getPort()); System.out.println("资源1:"+url.getFile()); System.out.println("资源2:"+url.getPath()); System.out.println("数据:"+url.getQuery()); System.out.println("锚点:"+url.getRef()); } }
4.爬虫
爬虫:
URL :
数据读入到程序中,写出到本地baidu.html
public class SpiderDemo05 { public static void main(String[] args) throws IOException { URL url = new URL("http://www.baidu.com"); //InputStream openStream() BufferedReader rd = new BufferedReader(new InputStreamReader(url.openStream())); String msg = null; while((msg=rd.readLine())!=null){ System.out.println(msg); } rd.close(); } }
5.UDP与TCP
5.1传输层协议
TCP:TCP(transfer control protocol) 打电话 面向连接、安全、可靠,效率低
UDP:UDP(UserDatagramProtocol ) 发送短信 非面向连接、不安全、数据可能丢失 、效率高
5.2UDP编程
UserDatagramProtocol,一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。其特点为:非面向连接;传输不可靠;数据可能丢失。
服务器端:
①创建服务器 DatagramSocket类 +指定端口 (定义服务器端的监听端口)
②准备接收容器 字节数组 +封装成DatagramPacket数据报 (准备容器接收数据)
③接收数据
④分析数据
⑤释放资源
客户端:
①创建客户端 DatagramSocket类 +指定端口 (定义客户端的监听端口)
②准备数据 字节数组
③封装成数据包 需要指定包发送的地址+端口 即服务器地与端口 (打包要发送的数据)
④发送数据
⑤释放资源
注意:只有先运行服务器端,才能接收到数据
字符串的传输:
public class UDPSend01 { public static void main(String[] args) throws Exception { //1.定义我是发送端 DatagramSocket(int port) DatagramSocket send = new DatagramSocket(8888);//客户端 System.out.println("我是发送端..."); //2.准备数据 String str = "发发发"; byte[] bytes = str.getBytes(); //3.打包 DatagramPacket packet = new DatagramPacket(bytes,0,bytes.length,new InetSocketAddress("127.0.0.1",9999)); 第一个是要打包的数据,第二个是偏移量,第三个是打包的长度,第四个是打包到哪个端口去 //4.发送 send.send(packet); //5.关闭 send.close(); } public class UDPReceive02 { public static void main(String[] args) throws Exception { //1.定义我是接收端 DatagramSocket rec = new DatagramSocket(9999); System.out.println("我是接收端...."); // 2.准备包裹,用来接收数据 byte[] bytes = new byte[1024]; DatagramPacket packet = new DatagramPacket(bytes,bytes.length); 将打包到的数据存到哪 // 3.接收 rec.receive(packet); // 4.处理数据 //getData() getLength() byte[] arr = packet.getData(); int len = packet.getLength(); System.out.println(new String(arr,0,len)); // 5.关闭 rec.close(); } }
文件传输:
public class UDPCopyFileClient03 { public static void main(String[] args) throws Exception { //1.定义我发送端 DatagramSocket client = new DatagramSocket(7890); System.out.println("-------------------发送端-------------------"); //2.准备数据 //1) 准备文件字节输入流 InputStream is = new BufferedInputStream(new FileInputStream("D:/test.txt")); byte[] car = new byte[1024*60]; int len = -1; //2)读入数据到字节数组 len = is.read(car); //3.把字节数组打包 DatagramPacket packet = new DatagramPacket(car,0,len,InetAddress.getLocalHost(),9999); //4.发送 client.send(packet); //5.关闭 is.close(); client.close(); } } public class UDPCopyFileServer04 { public static void main(String[] args) throws Exception { //1.定义我是接收端 DatagramSocket server = new DatagramSocket(9999); System.out.println("-------------------接收端-------------------"); //2.准备包裹接收数据 byte[] car = new byte[10]; DatagramPacket packet = new DatagramPacket(car,car.length); //3.接收 server.receive(packet); //4.处理数据 //1).从包裹获取接收的数据 byte[] arr = packet.getData(); int len = packet.getLength(); //2)定义输出流 OutputStream os = new BufferedOutputStream(new FileOutputStream("D:/copy.txt")); //3).写出到文件中 os.write(arr,0,len); //4).刷出 os.flush(); //5.关闭 os.close(); server.close(); } }
5.3 TCP编程
Socket:发送 TCP 消息
①连接服务器: 创建客户端 +指定服务器地址 +端口创建客户机Socket,并设置服务器的ip及端口,客户机发出连接请求,建立连接。
②发送数据
通过Socket发送数据,和接收数据
ServerSocket:创建服务器
①创建服务器 指定端口创建服务器ServerSocket,在创建时,定义ServerSocket的监听端口(在这个端口接收客户端发来的消息!)
②等待客户端连接 ServerSocket调用accept()方法,使之处于阻塞状态
③分析接收数据 利用Socket进行接收和发送数据
例:
tcp实现: 客户端 1.定义我是一个客户端 Socket 2.通过IO操作发送数据 3.刷出 4.关闭 public class TCPClient01 { public static void main(String[] args) throws Exception { //1.定义我是一个客户端 Socket Socket client = new Socket("localhost",9999); System.out.println("------------------Client--------------"); //2.获取输出流 getOutputStream() DataOutputStream os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream())); //3.写出字符串 os.writeUTF("哈哈哈"); //4.刷出 os.flush(); //5.关闭 os.close(); client.close(); } } tcp实现: 服务器端 1.定义我是服务端 ServerSocket ServerSocket(int port) 创建一个服务器套接字绑定到指定端口。 2.阻塞式监听 Socket accept() 监听连接套接字并接受它。 3.通过IO读入数据 4.处理数据 5.关闭 public class TCPServer02 { public static void main(String[] args) throws Exception { //1.定义我是服务端 ServerSocket server = new ServerSocket(9999); System.out.println("--------------Server-----------------"); //2.阻塞式监听 Socket client = server.accept(); System.out.println("一个客户端已经连接成功...."); //3.获取输入流 DataInputStream is = new DataInputStream(new BufferedInputStream(client.getInputStream())); //4.读入 数据 String msg = is.readUTF(); System.out.println(msg); //5.关闭 is.close(); client.close(); server.close(); } }
注意:先运行服务器端,在运行客户端。如果先运行客户端,会出现连接拒绝的异常。
例:TCP实现简单的登录验证
public class TCPLoginClient01 { public static void main(String[] args) throws Exception { //1.定义我是一个客户端 Socket Socket client = new Socket("localhost",9999); System.out.println("------------------Client--------------"); /* 接收用户键盘输入的用户名与密码 */ BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.println("请输入用户名:"); String name = reader.readLine(); System.out.println("请输入密码:"); String pwd = reader.readLine(); //2.获取输出流 getOutputStream() DataOutputStream os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream())); //3.写出字符串 os.writeUTF("username="+name+"&password="+pwd); //4.刷出 os.flush(); //5.接收服务器端给响应 DataInputStream is = new DataInputStream(new BufferedInputStream(client.getInputStream())); System.out.println(is.readUTF()); //6.关闭 os.close(); client.close(); } } public class TCPLoginServer02 { public static void main(String[] args) throws Exception { //1.定义我是服务端 ServerSocket server = new ServerSocket(9999); System.out.println("--------------Server-----------------"); //2.阻塞式监听 Socket client = server.accept(); System.out.println("一个客户端已经连接成功...."); //3.获取输入流 DataInputStream is = new DataInputStream(new BufferedInputStream(client.getInputStream())); //4.读入 数据 String msg = is.readUTF(); //处理数据 String name = ""; String pwd = ""; String[] arr = msg.split("&"); for(String str : arr){ String[] a = str.split("="); if("username".equals(a[0])){ name = a[1]; }else if("password".equals(a[0])){ pwd = a[1]; } } //获取输出流 响应给客户端结果 DataOutputStream os = new DataOutputStream(new BufferedOutputStream(client.getOutputStream())); //判断 if("laopei".equals(name) && "1234".equals(pwd)){ os.writeUTF("登录成功"); }else{ os.writeUTF("登录失败"); } //刷出 os.flush(); //5.关闭 os.close(); is.close(); client.close(); server.close(); } }
全部评论
(0) 回帖