目录
01_网络编程(网络编程概述)(了解)
02_网络编程(网络编程三要素之IP概述)(掌握)
03_网络编程(网络编程三要素之端口号概述)(掌握)
04_网络编程(网络编程三要素协议)(掌握)
05_网络编程(Socket通信原理图解)(了解)
06_网络编程(UDP传输)(了解)07_网络编程(UDP传输优化)
08_网络编程(UDP传输多线程)
09_网络编程(TCP协议)(掌握)
10_网络编程(TCP协议代码优化)
11_网络编程(服务端是多线程的)(掌握)
01_网络编程(网络编程概述)(了解)
* A:计算机网络 // * 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, // 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 // * B:网络编程 // * 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。
02_网络编程(网络编程三要素之IP概述)(掌握)
* 每个设备在网络中的唯一标识 // * 每台网络终端在网络中都有一个独立的地址,我们在网络中传输数据就是使用这个地址。 // * ipconfig:查看本机IP192.168.12.42 // * ping:测试连接192.168.40.62 // * 本地回路地址:127.0.0.1 255.255.255.255是广播地址 // * IPv4:4个字节组成,4个0-255。大概42亿,30亿都在北美,亚洲4亿。2011年初已经用尽。 // * IPv6:8组,每组4个16进制数。 // * 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f // * 1a2b::aaaa:0000:0000:0000:aabb:1f2f // * 1a2b:0000:aaaa::aabb:1f2f // * 1a2b:0000:aaaa::0000:aabb:1f2f // * 1a2b:0000:aaaa:0000::aabb:1f2f //
03_网络编程(网络编程三要素之端口号概述)(掌握)
* 每个程序在设备上的唯一标识 // * 每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。 // * 端口号范围从0-65535 // * 编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。 // * 常用端口 // * mysql: 3306 // * oracle: 1521 // * web: 80 // * tomcat: 8080 // * QQ: 4000 // * feiQ: 2425
04_网络编程(网络编程三要素协议)(掌握)
* 为计算机网络中进行数据交换而建立的规则、标准或约定的集合。 // * UDP // * 面向无连接,数据不安全,速度快。不区分客户端与服务端。 // * TCP // * 面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。 // * 三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据 //
05_网络编程(Socket通信原理图解)(了解)
* A:Socket套接字概述: // * 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。 // * 通信的两端都有Socket。 // * 网络通信其实就是Socket间的通信。 // * 数据在两个Socket间通过IO流传输。 // * Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。下面是Socket传输代码,先启动发送端
public class testSend1 {public static void main(String []args) throws Exception {String s="弄啥嘞";DatagramSocket socket=new DatagramSocket(); //创建Socket,相当于创建码头//创建Packet,相当于创建集装箱DatagramPacket packet=new DatagramPacket(s.getBytes(),s.getBytes().length, InetAddress.getByName("127.0.0.1"),6666);socket.send(packet); //发货,将数据形成socket.close();}
}
public class testReceive1 {public static void main(String []args) throws Exception {DatagramSocket socket=new DatagramSocket(6666);DatagramPacket packet=new DatagramPacket(new byte[1024],1024);socket.receive(packet); //接收数据byte []arr=packet.getData(); //获取数据int length=packet.getLength(); //获取有效的字节个数System.out.println(new String(arr,0,length));socket.close();}
}
06_网络编程(UDP传输)(了解)07_网络编程(UDP传输优化)
public class testSend2 {public static void main(String []args) throws Exception {Scanner in=new Scanner(System.in);DatagramSocket socket = new DatagramSocket(); //创建Socket,相当于创建码头//创建Packet,相当于创建集装箱while (true) {System.out.println("请输入: quit结束");String s=in.nextLine();if (s.equals("quit")){break;}DatagramPacket packet = new DatagramPacket(s.getBytes(), s.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);socket.send(packet);//发货,将数据形成}socket.close();}
}
public class testReceive2 {public static void main(String []args) throws Exception {DatagramSocket socket=new DatagramSocket(6666);while (true) {DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);socket.receive(packet); //接收数据byte[] arr = packet.getData(); //获取数据int length = packet.getLength(); //获取有效的字节个数String ip=packet.getAddress().getHostAddress();int port=packet.getPort();System.out.println("IP:"+ip+"Port:"+port+new String(arr, 0, length));}}
}
08_网络编程(UDP传输多线程)
public class testSend3 {public static void main(String []args){new ReceiveTest().start();new SendTest().start();}
}
class ReceiveTest extends Thread{@Overridepublic void run() {try {DatagramSocket socket=new DatagramSocket(6666);while (true) {DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);socket.receive(packet); //接收数据byte[] arr = packet.getData(); //获取数据int length = packet.getLength(); //获取有效的字节个数String ip=packet.getAddress().getHostAddress();int port=packet.getPort();System.out.println("IP:"+ip+"Port:"+port+new String(arr, 0, length));}} catch (IOException e) {e.printStackTrace();}}
}
class SendTest extends Thread{@Overridepublic void run() {try {Scanner in=new Scanner(System.in);DatagramSocket socket = new DatagramSocket(); //创建Socket,相当于创建码头//创建Packet,相当于创建集装箱while (true) {System.out.println("请输入: quit结束");String s=in.nextLine();if (s.equals("quit")){break;}DatagramPacket packet = new DatagramPacket(s.getBytes(), s.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);socket.send(packet);//发货,将数据形成}socket.close();} catch (IOException e) {e.printStackTrace();}}
}
09_网络编程(TCP协议)(掌握)
下面是TCP传输,先启动服务器端,后启动客户端
* 2.服务端 * * * 创建ServerSocket(需要指定端口号) * * * 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket * * * 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流 * * * 输入流可以读取客户端输出流写出的数据 * * * 输出流可以写出数据到客户端的输入流
public class testServer1 {public static void main(String []args) throws IOException {ServerSocket serverSocket=new ServerSocket(6666);Socket socket=serverSocket.accept(); //接受客户端的请求InputStream is=socket.getInputStream(); //接受客户端输入流OutputStream os=socket.getOutputStream(); //获取客户端输出流os.write("百度一下,你就知道".getBytes()); //服务器向客户端写出数据byte []arr=new byte[1024];int b=is.read(arr); //读取客户端的数据String s=new String(arr,0,b);System.out.println(s);socket.close();}
}
* * 1.客户端 * * 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器 * * 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流 * * 输入流可以读取服务端输出流写出的数据 * * 输出流可以写出数据到服务端的输入流
public class testClient1 {public static void main(String []args) throws IOException {Socket socket= new Socket("192.168.0.7",6666);InputStream is=socket.getInputStream(); //获取客户端输入流OutputStream os=socket.getOutputStream(); //获取客户端输出流byte []arr=new byte[1024];int b=is.read(arr);String s=new String(arr,0,b);System.out.println(s);os.write("勇敢去追".getBytes()); //客户端向服务器端写数据socket.close();}
}
10_网络编程(TCP协议代码优化)11_网络编程(服务端是多线程的)(掌握)
public class testServer2 {public static void main(String []args) throws IOException {ServerSocket serverSocket=new ServerSocket(6666);while (true) {Socket socket = serverSocket.accept(); //接受客户端的请求new Thread(){ //每接受一个请求就开启一次线程@Overridepublic void run() {try {BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); //将字节流包装成字符流PrintStream ps = new PrintStream(socket.getOutputStream()); //PrintStream有写出换行的方法ps.println("你好,客户端");System.out.println(br.readLine());ps.println("这是服务器端");System.out.println(br.readLine());socket.close();} catch (IOException e) {e.printStackTrace();}}}.start();}}
}
public class testClient2 {public static void main(String []args) throws IOException {Socket socket= new Socket("192.168.0.7",6666);BufferedReader br=new BufferedReader(new InputStreamReader(socket.getInputStream())); //将字节流包装成字符流PrintStream ps=new PrintStream(socket.getOutputStream()); //PrintStream有写出换行的方法System.out.println(br.readLine());ps.println("你好,我是客户端"); //向服务器端写出System.out.println(br.readLine());ps.println("这是客户端");socket.close();}
}