- 网络编程
- 计算机网络:
是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。 - 网络编程:
就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。
- 计算机网络:
- 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
- 端口号port 概述
- 每个程序在设备上的唯一标识
- 每个网络程序都需要绑定一个端口号,传输数据的时候除了确定发到哪台机器上,还要明确发到哪个程序。
- 端口号范围从0-65535
- 编写网络应用就需要绑定一个端口号,尽量使用1024以上的,1024以下的基本上都被系统程序占用了。
- 常用端口:mysql: 3306;oracle: 1521;web: 80;tomcat: 8080;QQ: 4000
- 协议 概述
- 为计算机网络中进行数据交换而建立的规则、标准或约定的集合。
- UDP(User Datagram Protocol 用户数据报协议)
面向无连接,数据不安全,速度快。不区分客户端与服务端。——-类似于发短信 - TCP(Transmission Control Protocol传输控制协议)
面向连接(三次握手),数据安全,速度略低。分为客户端和服务端。——类似于打电话
三次握手: 客户端先向服务端发起请求, 服务端响应请求, 传输数据
- TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用程序(进程)。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。
- Socket套接字概述:socket是对TCP/IP协议的封装和应用
- 网络上具有唯一标识的IP地址和端口号组合在一起才能构成唯一能识别的标识符套接字。
- 通信的两端都有Socket。
- 网络通信其实就是Socket间的通信。
- 数据在两个Socket间通过IO流传输。
- Socket在应用程序中创建,通过一种绑定机制与驱动程序建立关系,告诉自己所对应的IP和port。
127.0.0.1 是回送地址,可用于自己跟自己发送信息
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; import java.util.Scanner; public class Demo3_MoreThread { /** * @param args */ public static void main(String[] args) { new Receive().start(); new Send().start(); } } class Receive extends Thread { public void run() { try { DatagramSocket socket = new DatagramSocket(1626); //创建Socket相当于创建码头 DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);//创建Packet相当于创建集装箱 while(true) { socket.receive(packet); //接货,接收数据 byte[] arr = packet.getData(); //获取数据 int len = packet.getLength(); //获取有效的字节个数 String ip = packet.getAddress().getHostAddress(); //获取ip地址 int port = packet.getPort(); //获取端口号 System.out.println(ip + ":" + port + ":" + new String(arr,0,len)); } } catch (IOException e) { e.printStackTrace(); } } } class Send extends Thread { public void run() { try { Scanner sc = new Scanner(System.in); //创建键盘录入对象 DatagramSocket socket = new DatagramSocket(); //创建Socket相当于创建码头 while(true) { String line = sc.nextLine(); //获取键盘录入的字符串 if("quit".equals(line)) { break; } DatagramPacket packet = //创建Packet相当于集装箱 new DatagramPacket(line.getBytes(), line.getBytes().length, InetAddress.getByName("127.0.0.1"), 1626); socket.send(packet); //发货,将数据发出去 } socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
alt + shift + L 提取变量
alt + shift + M 提取方法TCP协议(Socket类和ServerSocket类)
- 1.客户端(Socket类)
* 创建Socket连接服务端(指定ip地址,端口号)通过ip地址找对应的服务器
- 调用Socket的getInputStream()和getOutputStream()方法获取和服务端相连的IO流
- 输入流可以读取服务端输出流写出的数据
- 输出流可以写出数据到服务端的输入流
- 2.服务端(ServerSocket类)
- 创建ServerSocket(需要指定端口号)
- 调用ServerSocket的accept()方法接收一个客户端请求,得到一个Socket
- 调用Socket的getInputStream()和getOutputStream()方法获取和客户端相连的IO流
- 输入流可以读取客户端输出流写出的数据
- 输出流可以写出数据到客户端的输入流
- 1.客户端(Socket类)
tcp协议客户端和服务器之间传输优化
InputStream/OutputStream——->BufferedReader,PrintStream
学习日记48--java学习--网络编程
最新推荐文章于 2023-10-25 20:55:42 发布