客户机-服务器系统通信
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
正因为UDP无需建立类如三次握手的连接,而使得通信效率很高
DatagramPacket类:表示数据报包
DatagramSocket类:进行端到端通信的类
三、UDP编程
UDP通信的流程比较简单,因此要搭建这么 一个常用的UDP通信框架也是比较简单的。 右图是UDP的框架图。
由右边框图可以看出,客户端要发起一次请 求,仅仅需要两个步骤(socket和sendto), 而服务器端也仅仅需要三个步骤即可接收到 来自客户端的消息(socket、bind、 recvfrom)。
一、网络基础知识
1、两台计算机间进行通讯需要以下三个条件:IP地址、协议、端口号
2、TCP/IP协议:是目前世界上应用最为广泛的协议,是以TCP和IP为基础的不同层次 上多个协议的集合,也成TCP/IP协议族、或TCP/IP协议栈
TCP:Transmission Control Protocol 传输控制协议
2、Java中基于TCP协议实现网络通信的类
客户端的Socket类
服务器端的ServerSocket类
3、Socket通信的步骤 ① 创建ServerSocket和Socket ② 打开连接到Socket的输入/输出流 ③ 按照协议对Socket进行读/写操作
④ 关闭输入输出流、关闭Socket
二、TCP编程
三、UDP编程
多线程实现服务器与多客户端之间通信步骤 1.服务器端创建DatagramSocket的实例socket,循环调用receive()方法,此方法在接收 到数据报之前会一直阻塞。 2.客户端创建DatagramSocket,将含有地址,端口号和内容的数据报包发送出去。 3. 服务器端收到数据报包packet,通过DatagramSocket和packet与客户端建立一个线程 4. 服务器端继续等待新的数据报包。 5. 发送方的DatagramPacket构造方法传递四个参数包含数据内容,数据大小,地址和端口 号。接收方的DatagramPacket构造方法有两个参数接收数据和数据大小。
三、UDP编程
1、服务器端实现步骤 ① 创建DatagramSocket, 指定端口号 ② 创建DatagramPacket ③ 接受客户端发送的数据 信息 ④ 读取数据
三、UDP编程
2、客户端实现步骤 ① 定义发送信息 ② 创建DatagramPacket 包含将要发送的信息 ③ 创建DatagramSocket ④ 发送数据
三、UDP编程
创建服务器端类
三、UDP编程
创建客户端类
二、TCP编程
创建处理线程类ServerThread
二、TCP编程
创建服务器端类 使用while以达到可以循环侦听不同客户端的连接请求。因为这是一个死循环,所以 不用关闭也没有机会去关闭serverSocket。设置count值,用于记录服务器端被连接过的 次数并显示客户端所在ip值。
二、TCP编程
三、UDP编程
UDP(user datagram protocol)的中文叫用户数据报协议,属于传输层。
UDP是面向非连接的协议,是无连接的、不可靠的、无序的,速度快,它不与对方建立连接, 而是直接把我要发的数据报发给对方。 进行数据传输时,首先将要传输的数据定义成数据报(Datagram),大小限制在64k, 在数据报中指明数据索要达到的Socket(主机地址和端口号),然后再将数据报发送出去 所以UDP适用于一次传输数据量很少、对可靠性要求不高的或对实时性要求高的应用场景。
三、UDP编程
创建服务器线程处理类 UDPThread 注意,DatagramSocket的实 例socket不能关闭,会出现 SocketException。读取数据用到 的new String(packet.getData(), 0, packet.getLength()),参数表 示数据报中的字节数组,位置和长 度。
IP:Internet Protocol 互联网协议 3、IP地址:为实现网络中不同计算机之间的通信,每台计算机都必须有一个唯一的 标识---IP地址。32位二进制 4、端口:区分一台主机的多个不同应用程序,端口号范围为0-65535,其中0-1023位 为系统保留。如:HTTP:80 FTP:21 Telnet:23
IP地址+端口号组成了所谓的Socket,Socket是网络上运行的程序之间双向通信链 路的终结点,是TCP和UDP的基础
一、网络基础知识
5、Socket套接字:网络上具有唯一标识的IP地址和端口组合在一起才能构成唯一能识别的标识 符套接字。
Soቤተ መጻሕፍቲ ባይዱket原理机制: 通信的两端都有Socket 网络通信其实就是Socket间的通信 数据在两个Socket间通过IO传输 6、Java中的网络支持:针对网络通信的不同层次,Java提供了不同的API,其提供的网络功能 有四大类: InetAddress:用于标识网络上的硬件资源,主要是IP地址 URL:统一资源定位符,通过URL可以直接读取或写入网络上的数据
4、服务器端:
① 创建ServerSocket对象, 绑定监听端口 ② 通过accept()方法
监听客户端请求
③ 连接建立后,通过输入流 读取客户端发送的请求信息 ④ 通过输出流向客户端 发送相应信息 ⑤ 关闭相关资源
二、TCP编程
5、客户端:
① 创建Socket对象,指明需要 连接的服务器的地址和端口号 ② 连接建立后,通过输出流 向服务器端发送请求信息 ③ 通过输入流获取服务器 响应的信息 ④ 关闭相关资源
创建客户端类
二、TCP编程
关于线程的一些问题 在线程的Thread对象上调用start()方法,而不是run()或者别的方法。 在调用start()方法之前:线程处于新状态中,新状态指有一个Thread对象,但还没有一 个真正的线程。 在调用start()方法之后:发生了一系列复杂的事情 启动新的执行线程(具有新的调用栈); 该线程从新状态转移到可运行状态; 当该线程获得机会执行时,其目标run()方法将运行。 注意:对Java来说,run()方法没有任何特别之处。像main()方法一样,它只是新线程知 道调用的方法名称(和签名)。因此,在Runnable上或者Thread上调用run方法是合法的。 但并不启动新的线程。
二、TCP编程
6.应用多线程来实现服务器与多线程之间的通信的基本步骤 1)、服务器端创建ServerSocket,循环调用accept()等待客户端链接 2)、客户端创建一个Socket并请求和服务器端链接 3)、服务器端接受客户端请求,创建socekt与该客户端建立专线链接 4)、建立链接的socket在一个单独的线程上对话 5)、服务器继续等待新的链接
客户机-服务器系统通信 之Java Socket
组员:张庆平 符艺瀚 黄超博 李铭豪 主讲:张庆平
Socket编程
• Java最初是作为网络编程语言出现的,其对网 络提供了高度的支持,使得客户端和服务器的 沟通变成了现实,而在网络编程中,使用最多 的就是Socket。
• 一、网络基础知识 • 二、TCP编程 • 三、UDP编程
Sockets:使用TCP协议实现的网络通信Socket相关的类
Datagram:使用UDP协议,将数据保存在用户数据报中,通过网络进行通信。
二、TCP编程
1、TCP协议是面向连接的、可靠的、有序的、以字节流的方式发送数据,通过三次握 手方式建立连接,形成传输数据的通道,在连接中进行大量数据的传输,效率会稍低