网络编程

it2025-02-04  11

网络编程

1、计算机网络概念

​ 网络即将不同区域的电脑连接到一起,组成局域网、城域网或广域网。

​ 主要功能:

​ 1、资源共享

​ 2、信息传输与集中处理

​ 3、均衡负荷与分布处理

2、通讯协议

​ 计算机网路必须按照相同的通讯协议才能实现网络共享。

​ 协议三要素:语义,语法,时序

3、网络爬虫

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

4、传输层协议

TCP协议:

​ 打电话面向连接、安全、可靠、效率低

UDP协议:

​ 发送短信非面向连接、不安全、数据可能丢失、效率高

UDP定义发送端

import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; /* 协议: 传输层协议 UDP :非面向连接 写信 不安全 协议小 简单 效率高 大小限制一般不超60k TCP :面向连接 打电话 安全 效率低 没有大小限制 3次握手 面向Socket编程 Socket 套接字 是传输层为应用层开辟的一个小口子,用来传输或者接受数据 不同写一下Socket实现不同 UDP: DatagramSocket : 定义发送端和接收端 DatagramPacket : 打包 UDP定义发送端: 1.定义我是发送端 DatagramSocket(int port) 2.准备数据 3.打包 DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) 构造一个数据报包发送数据包的长度 length抵消 ioffsetto指定主机上的指定端口号。 4.发送 send(DatagramPacket p) 5.关闭 */ 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(); } }

UDP定义接收端

import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; /* UDP定义接收端: 1.定义我是接收端 2.准备包裹,用来接收数据 DatagramPacket(byte[] buf, int length) 3.接收 4.处理数据 5.关闭 */ 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(); } }

TCP定义客户端

import java.io.*; import java.net.Socket; /* 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(); } }

TCP定义服务端

import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.net.ServerSocket; import java.net.Socket; /* tcp实现登录: 服务器端 用户名 =laopei 密码 =1234 考虑: 对多个客户端做响应????? */ 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)