Java 网络编程 1.1 网络编程介绍 网络编程指的就是直接或间接地通过网络协议与其他计算机进行通信。 网络编程中的基础概念: 1,网络分类 2,网络编程模型 3,网络协议 4,套接字和端口 1.2 网络编程介绍 网络分类:网络是指将有独立功能的多台计算机,通过通信设备线路连接起来,在网络软件的支持下,实现彼此之间资源共享和数据通信的整个系统。 网络范围可分为: 局域网(LocalArea Network)简称 LAN,是一种在小范围内实现的计算机网络,一般在一个建筑物内或者一个工厂、一个事业单位内部独有,范围较小。 城域网(Metropolitan Area Network)简称为 MAN,一般是一个城市内部组建的计算机信息网络,提供全市的信息服务。 广域网(Wide Area Network)简称为 WAN,它的范围很广,可以分布在一个省、 一个国家或者几个国家。 因特网(Internet)则是由无数的 LAN 和 WAN 组成的。 1.3 网络编程介绍 网络编程模型:在网络通信中主要有两种模式的通信方式: 1,客户机/服务器(Client/Server)模式,简称为 C/S 模式。 例如:电脑上安装的程序 2,浏览器/服务器(Browser/Server)模式,简称 B/S 模式。 例如:通过浏览器访问的网站 .4 网络编程介绍 网络协议:网络协议是网络上所有设备(网络服务器、计算机及交换机、路由器、防 火墙等)之间通信规则的集合,它规定了通信时信息必须采用的格式和格式的意义。 常用的网络协议: 1,IP 协议 英文Internet Protocol(网络之间互联的协议) 2,TCP协议 英文Transmission Control Protocol (传输控制协议) 3,UDP协议 英文User Datagram Protocol (用户数据报协议) 1.5 网络编程介绍 套接字和端口:在网络上很多应用程序都是采用客户端/服务器(C/S)的模式,实现网络通信必须将两台计算机连接起来建立一个双向的通信链路,这个双向通信链路的每一端称之为一个套接字(Socket)。 一台服务器上可能提供多种服务,使用 IP 地址只能唯一定位到某一台计算机,却不能准确地连接到想要连接的服务器。通常使用一个 0~65535 的整数来标识该机器上的某个服务,这个整数就是端口号(Port)。端口号并不是指计算机上实际存在的物理位置,而是一种软件上的抽象。 运行在一台特定机器上的某个服务器都有一个套接字绑定在该服务器上,服务器只是等待和监听客户的连接请求。客户端客户需要知道服务器的主机名和端口号。
1.6 网络编程介绍 Java 网络编程是指编写运行在多个设备(计算机)的Java程序,这些设备都通过网络连接起来。java.net 包中 J2SE 的 API 包含有类和接口,它们提供低层次的通信细节。 你可以直接使用这些类和接口,来专注于解决问题,而不用关注通信细节。 java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之间的可靠通信。通常用于互联网协议,被称 TCP / IP。 UDP:UDP 是用户数据报协议的缩写,一个无连接的协议。提供了应用程序之间要发送的数据的数据包。 1.7 网络编程介绍 TCP四层协议: 链路层:数据链路层或网络接口层,包括设备驱动程序和网络接口卡,它们一起处理与电缆的物理接口细节。 网络层:处理分组在网络中的活动,如分组的选路;网络层的协议包括IP协议、ICMP协议(Internet互联网控制报文协议)、IGMP协议(Internet组管理协议)。 传输层:主要为两台主机上的应用程序提供端到端的通信,包括TCP(传输控制协议)和UDP(用户数据报协议)。 应用层:处理特定的应用程序细节。 1.8TCP七层协议: 1.9 网络编程介绍 三次握手: 第一次握手:客户端发送网络包,服务端收到。服务端得出结论:客户端发送能力、 服务端接收能力正常。 第二次握手:服务端发包,客户端收到。客户端得出结论:服务端接收、发送能力正 常,客户端接收、发送能力正常。 第三次握手:客户端发包,服务端收到。服务端得出结论:客户端接收、发送能力正 常,服务端发送、接收能力正常。 所以第一、二次握手,只是为了验证彼此的接收发送能力是否正常。 经历上面的三次握手过程,客户端和服务端都确认了自己的接收、发送能力是正常的,就可以正常通信了 1.1.0 网络编程介绍 四次挥手: 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。 2.1 Socket编程 Socket类代表一个套接字,ServerSocket类服务器监听客户端的连接。 两台计算机之间使用套接字建立TCP连接的步骤: 1,服务器实例化一个ServerSocket对象,表示通过服务器上的端口通信。 2,服务器调用ServerSocket类的accept() 方法等待客户端连接到服务器给定的端口。 3,客户端实例化一个Socket对象,指定服务器IP和端口号请求连接。如果通信被建立,则在客户端创建一个Socket对象能够与服务器进行通信。 5,服务器端接收到连接,accept()方法返回一个socket引用,该socket连接到客户端的socket。 连接建立后,通过使用 I/O 流在进行通信,每一个socket都有一个输出流和一个输入流,客户端的输出流连接到服务器端的输入流,而客户端的输入流连接到服务器端的输出流 3.1 Socket 服务端 ServerSocket serverSocket = new ServerSocket(端口号); Socket server = serverSocket.accept(); System.out.println("远程主机地址:" + server.getRemoteSocketAddress()); DataInputStream in = new DataInputStream(server.getInputStream()); System.out.println(in.readUTF()); DataOutputStream out = new DataOutputStream(server.getOutputStream()); out.writeUTF("谢谢连接我:" + server.getLocalSocketAddress()); server.close(); 4.1 Socket 客户端 Socket client = new Socket(IP地址,端口号); OutputStream outToServer = client.getOutputStream(); DataOutputStream out = new DataOutputStream(outToServer); out.writeUTF("Hello from " + client.getLocalSocketAddress()); InputStream inFromServer = client.getInputStream(); DataInputStream in = new DataInputStream(inFromServer); System.out.println("服务器响应: " + in.readUTF()); client.close() 课后练习题 1,使用socket网络编程编写一个服务端程序和一个客户端程序,通过控制台进行及时聊天。 标签:__,Java,Socket,编程,网络,服务器,多线程,服务端,客户端 From: https://www.cnblogs.com/xiaolehong/p/16747083.html