(1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)
1.1 编程模型
服务器:
(1)创建ServerSocket类型的对象,并提供端口号;
(2)等待客户端的连接请求,调用accept()方法;
(3)使用输入输出流进行通信;
(4)关闭Socket并释放有关的资源;
客户端:
(1)创建Socket类型的对象,并提供服务器的IP地址和端口号;
(2)使用输入输出流进行通信;
(3)关闭Socket并释放有关的资源;
1.2 相关类和方法的解析
(1)ServerSocket类
java.net.ServerSocket类主要用于描述服务器的套接字(大插排)。
ServerSocket(int port) - 根据参数指定的端口号来构造对象。
Socket accept() - 侦听并接受到此套接字的连接请求。
void close() - 关闭套接字。
(2)Socket类
java.net.Socket类用于描述客户端的套接字,该套接字是两台机器间通信的端点。
Socket(String host, int port) - 根据参数指定的主机名和端口号来构造对象。
InputStream getInputStream() - 用于获取当前Socket的输入流。
OutputStream getOutputStream() - 用于获取当前Socket的输出流。
void close()
练习:
编写TestServerString类,使用BufferedReader类读取字符串内容并打印出来;
编写TestClientString类,使用PrintStream类发送字符串"hello"给服务器;
要求实现服务器接受到客户端的消息后,向客户端回发消息"I receive!";
要求实现客户端发送给服务器的数据内容由用户从键盘输入;
要求实现客户端和服务器可以不断地进行通信,直到客户端发送"bye"后通信结束;
要求服务器可以不断地响应客户端的连接请求,采用多线程技术实现;
扩展作业:
要求实现每当服务器接受到客户端发来的消息后,就将该消息发送给当前在线所有客户端
要求采用多线程分别处理消息的发送和接收;
要求实现聊天记录的生成;
要求实现文件的传输;
要求实现单聊和群聊的功能选择;
2.tcp协议和udp协议的比较(笔试题)
2.1 tcp协议
tcp协议 - 传输控制协议,是一种面向连接的协议,类似于打电话。
- 建立连接 => 进行通信 => 断开连接
- 在通信的整个过程中全程保持连接
- 保证了数据传递的可靠性和有序性
- 是一种全双工的字节流通信方式
- 服务器压力比较大,资源消耗比较多,并且发送数据的效率相对比较低
2.2 udp协议
udp协议 - 用户数据报协议,是一种非面向连接的协议,类似于写信。
- 在通信的整个过程中不保持连接
- 不保证数据传递的可靠性和有序性
- 是一种全双工的数据报通信方式
- 服务器压力比较小,资源消耗比较少,并且发送数据的效率相对比较高
3.基于udp协议的编程模型(重点)
3.1 编程模型
主机A(接收方):
(1)创建DatagramSocket类型的对象,并提供端口号;
(2)创建DatagramPacket类型的对象,用于接收发来的数据;
(3)从Socket中接收数据,调用receive()方法;
(4)关闭Socket并释放有关的资源;
主机B(发送方)
(1)创建DatagramSocket类型的对象;
(2)创建DatagramPacket类型的对象,并提供接收方的IP地址和端口号;
(3)通过Socket发送数据,调用send()方法;
(4)关闭Socket并释放有关的资源;
3.2 相关类和方法的解析
(1)DatagramSocket类
java.net.DatagramSocket类用于描述发送或接受数据报的套接字(邮局点);
DatagramSocket() - 无参的方式构造对象。
DatagramSocket(int port) - 根据参数指定的端口号来构造对象。
void receive(DatagramPacket p) - 用于接收数据并存放到参数指定的变量中。
void send(DatagramPacket p) - 用于将参数指定的数据发送出去。
void close()
(2)DatagramPacket类
java.net.DatagramPacket类用于描述数据报信息(信件);
DatagramPacket(byte[] buf, int length) - 用于接收数据包并记录到参数变量中;
DatagramPacket(byte[] buf, int length, InetAddress address, int port)
- 用于将参数指定的数据发送到参数指定的位置
InetAddress getAddress() - 用于获取发送方或接收方的通信地址信息。
int getPort() - 用于获取发送方或接收方的端口信息。
int getLength() - 用于获取发送或接收数据的长度。
(3)InetAddress类
java.net.InetAddress类用于描述互联网协议地址。
static InetAddress getLocalHost() - 用于获取本地主机的通信地址信息。
static InetAddress getByName(String host) - 根据参数指定的主机名来获取通信地址。
String getHostName() - 用于获取通信地址中的主机名信息。
String getHostAddress() - 用于获取通信地址中的IP地址信息。
(1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制的更多相关文章
- (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型
1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...
- python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- python语法基础-网络编程-TCP协议和UDP协议
############### 网络编程 ############## """ 网络编程 学习了Python基础之后,包括函数,面向对象等,你就可以开发了,你 ...
- 网络编程杂谈之TCP协议
TCP协议属于网络分层中的传输层,传输层作用的就是建立端口与端口的通信,而其下一层网络层的主要作用是建立"主机到主机"的通信,所以在我们日常进行网络编程时只要确定主机和端口,就能实 ...
- Linux--网络基础(概念+协议的了解+OSI七层模型,TCP/IP五层协议,网络数据传输流程)
网络的发展 网络的发展有下面几个阶段: 独立模式:计算机最开始是以单机模式被广泛使用的.每一台计算机都是独立的,之间不能够进行数据共享与通信 网络互联: 计算机之间可以链接在一起,完成数据共享,计算机 ...
- Android网络编程系列 一 TCP/IP协议族之传输层
这篇借鉴的文章主要是用于后续文章知识点的扩散,在此特作备份和扩散学习交流. 传输层中有TCP协议与UDP协议. 1.UDP介绍 UDP是传输层协议,和TCP协议处于一个分层中,但是与TCP协议不同,U ...
- TCP/IP协议:OSI七层模型、TCP/IP四层模型的对比
1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...
- OSI七层协议模型、TCP/IP四层模型学习笔记
1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...
随机推荐
- springMVC实现json
很多时候前端都需要调用后台服务实现交互功能,常见的数据交换格式多是JSON或XML,这里主要讲解Spring MVC为前端提供JSON格式的数据并实现与前台交互. 一.概要 JSON(JavaScri ...
- lucene源码分析(5)lucence-group
1. 普通查询的用法 org.apache.lucene.search.IndexSearcher public void search(Query query, Collector results) ...
- [WC 2018]州区划分
Description 题库链接 小 \(S\) 现在拥有 \(n\) 座城市,第 \(i\) 座城市的人口为 \(w_i\) ,城市与城市之间可能有双向道路相连. 现在小 \(S\) 要将这 \(n ...
- Node.js之HTPP URL
几乎每门编程语言都会包括网络这块,Node.js也不例外.今天主要是熟悉下Node.js中HTTP服务.其实HTTP模块是相当低层次的,它不提供路由.cookie.缓存等,像Web开发中不会直接使用, ...
- Ionic APP 热更新
开门见山,本文主题:cordova-hot-code-push 作用:cordova热更新插件,提供了在应用程序中对基于Web的内容进行自动更新的功能. GitHub地址:https://github ...
- JavaScript 学习(一)
此篇为学习笔记 JS 简介 JavaScript 是一种轻量级的脚本编程语言JavaScript 是可插入 HTML 页面的编程代码.JavaScript 插入 HTML 页面后,可由所有的现 ...
- Spring中的Bean的配置形式
Spring中Bean的配置形式有两种,基于XML文件的方式和基于注解的方式. 1.基于XML文件的方式配置Bean <?xml version="1.0" encoding ...
- ZAB 算法
ZAB (Zookeeper Atomic Broadcast ) zookeeper原子消息广播协议 保证:分布式数据一致性 所有事务请求必须由一个全局唯一的服务器来协调处理,这样的服务器被称为 ...
- MVC 客户端(Memo = "<img src="http://">")中检测到有潜在的危险的 Request.Form 值 的解决方案
解释定义:ASP.NET为了阻止跨站脚本攻击,会对向服务器端输入的HTML代码进行防御措施,在使用.NET MVC中,可以对validateinput属性设置,但是,有时需要ASP.NET临时关闭这个 ...
- 【学习笔记】--- 老男孩学Python,day18 面向对象------抽象类(接口类), 多态, 封装
抽象类,接口类 Python没有接口这个概念 抽象类(接口类): 目的是制定一个规范 要学会归一化设计,有重复的东西就要想把它们合并起来 from abc import ABCMeta, abstra ...